android中使用javamail发送邮件附件

使用javamail必须先下载3个JAR包并导入工程 activation.jar additonnal.jar mail.jar导入方法为: project->properties->java build path->libraries->add external jars然后在android项目中添加网络访问权限 <uses-permission android:name="android.permission.INTERNET"></uses-permission>最后在程序中加载如下包import android.app.Activity;import android.os.Bundle;import android.util.Log;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.*;import javax.mail.internet.*;import javax.mail.PasswordAuthentication;调用函数代码如下class MyAuthenticatorextends javax.mail.Authenticator {private String strUser;private String strPwd;public MyAuthenticator(String user, String password){this.strUser = user;this.strPwd = password;}protected PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication(strUser, strPwd);}}public void send_mail_file(String str_to_mail,String str_from_mail,String str_smtp,String str_user,String str_pass,String str_title,String str_body,String str_file_path){Log.v("lengfeng","send_mail_file");String host = str_smtp; //发件人使用发邮件的电子信箱服务器String from = str_from_mail; //发邮件的出发地(发件人的信箱)String to = str_to_mail; //发邮件的目的地(收件人信箱)Log.v("lengfeng",str_smtp);Log.v("lengfeng",str_from_mail);Log.v("lengfeng",str_to_mail);Properties props = System.getProperties();// Get system propertiesprops.put("mail.smtp.host", host);// Setup mail serverprops.put("mail.smtp.auth", "true"); //这样才能通过验证MyAuthenticator myauth = new MyAuthenticator(str_user, str_pass);// Get sessionSession session = Session.getDefaultInstance(props, myauth);MimeMessage message = new MimeMessage(session); // Define messagetry {message.setFrom(new InternetAddress(from)); // Set the from address} catch (AddressException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}try {message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));// Set the to address} catch (AddressException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}try {message.setSubject(str_title);// Set the subject} catch (MessagingException e) {e.printStackTrace();}try {message.setText(str_body);// Set the content} catch (MessagingException e) {e.printStackTrace();}MimeBodyPart attachPart = new MimeBodyPart();FileDataSource fds = new FileDataSource(str_file_path); //打开要发送的文件try {attachPart.setDataHandler(new DataHandler(fds));} catch (MessagingException e) {e.printStackTrace();}try {attachPart.setFileName(fds.getName());} catch (MessagingException e) {e.printStackTrace();}MimeMultipart allMultipart = new MimeMultipart("mixed"); //附件try {allMultipart.addBodyPart(attachPart);//添加} catch (MessagingException e) {e.printStackTrace();}try {message.setContent(allMultipart);} catch (MessagingException e) {e.printStackTrace();}try {message.saveChanges();} catch (MessagingException e) {e.printStackTrace();}try {Transport.send(message);//开始发送} catch (MessagingException e) {e.printStackTrace();}}

之前写的不够完整,害人不浅,,现在补充如下

第一个常见问题,

Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

将引用的第三方包,添加进工作的build path。

(关键的一步)将lib设为源文件夹。如果不设置,则程序编译可以通过,但运行的时候,会报:java.lang.NoClassDefFoundError

第二个问题

发送附件时会报

java-mail的程序在服务器上运行出现error:

javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/related;

解决方法是

就是在sendmail前,加一段代码:

// add handlers for main MIME typesMailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap();mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");CommandMap.setDefaultCommandMap(mc);

有希望在的地方,痛苦也成欢乐

android中使用javamail发送邮件附件

相关文章:

你感兴趣的文章:

标签云: