Javamail-Android配置步骤:

  1. 下载Android版本JavaMail包,additional.jar、mail.jar和activation.jar,下载地址JavaMail-Android

  2. 在项目与src同一目录级别下,新建文件夹lib,将下载的3个jar包放入该文件夹

  3. 右键->Properties->Java Build Path->Libraries,选择Add External JARs,找到项目下lib目录的3个jar包


我的代码有三个类:
第一个类:MailSenderInfo.java

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderInfo { // 发送邮件的服务器的IP和端口 private String mailServerHost; private String mailServerPort = "25" ; // 邮件发送者的地址 private String fromAddress; // 邮件接收者的地址 private String toAddress; // 登陆邮件发送服务器的用户名和密码 private String userName; private String password; // 是否需要身份验证 private boolean validate = false ; // 邮件主题 private String subject; // 邮件的文本内容 private String content; // 邮件附件的文件名 private String[] attachFileNames; /** * 获得邮件会话属性 */ public Properties getProperties(){ Properties p = new Properties(); p.put( "mail.smtp.host" , this .mailServerHost); p.put( "mail.smtp.port" , this .mailServerPort); p.put( "mail.smtp.auth" , validate ? "true" : "false" ); return p; } public String getMailServerHost() { return mailServerHost; } public void setMailServerHost(String mailServerHost) { this .mailServerHost = mailServerHost; } public String getMailServerPort() { return mailServerPort; } public void setMailServerPort(String mailServerPort) { this .mailServerPort = mailServerPort; } public boolean isValidate() { return validate; } public void setValidate( boolean validate) { this .validate = validate; } public String[] getAttachFileNames() { return attachFileNames; } public void setAttachFileNames(String[] fileNames) { this .attachFileNames = fileNames; } public String getFromAddress() { return fromAddress; } public void setFromAddress(String fromAddress) { this .fromAddress = fromAddress; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } public String getToAddress() { return toAddress; } public void setToAddress(String toAddress) { this .toAddress = toAddress; } public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public String getSubject() { return subject; } public void setSubject(String subject) { this .subject = subject; } public String getContent() { return content; } public void setContent(String textContent) { this .content = textContent; } }

第二个类:MultiMailsender.java

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 package com.util.mail; import java.util.Date; import java.util.Properties; import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; /** * 发送邮件给多个接收者、抄送邮件 */ public class MultiMailsender { /** * 以文本格式发送邮件 * @param mailInfo 待发送的邮件的信息 */ public boolean sendTextMail(MultiMailSenderInfo mailInfo) { // 判断是否需要身份认证 MyAuthenticator authenticator = null ; Properties pro = mailInfo.getProperties(); if (mailInfo.isValidate()) { // 如果需要身份认证,则创建一个密码验证器 authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); } // 根据邮件会话属性和密码验证器构造一个发送邮件的session Session sendMailSession = Session.getDefaultInstance(pro,authenticator); try { // 根据session创建一个邮件消息 Message mailMessage = new MimeMessage(sendMailSession); // 创建邮件发送者地址 Address from = new InternetAddress(mailInfo.getFromAddress()); // 设置邮件消息的发送者 mailMessage.setFrom(from); // 创建邮件的接收者地址,并设置到邮件消息中 Address[] tos = null ; String[] receivers = mailInfo.getReceivers(); if (receivers != null ){ // 为每个邮件接收者创建一个地址 tos = new InternetAddress[receivers.length + 1 ]; tos[ 0 ] = new InternetAddress(mailInfo.getToAddress()); for ( int i= 0 ; i<receivers.length; i++){ tos[i+ 1 ] = new InternetAddress(receivers[i]); } } else { tos = new InternetAddress[ 1 ]; tos[ 0 ] = new InternetAddress(mailInfo.getToAddress()); } // Message.RecipientType.TO属性表示接收者的类型为TO mailMessage.setRecipients(Message.RecipientType.TO,tos); // 设置邮件消息的主题 mailMessage.setSubject(mailInfo.getSubject()); // 设置邮件消息发送的时间 mailMessage.setSentDate( new Date()); // 设置邮件消息的主要内容 String mailContent = mailInfo.getContent(); mailMessage.setText(mailContent); // 发送邮件 Transport.send(mailMessage); return true ; } catch (MessagingException ex) { ex.printStackTrace(); } return false ; } /** * 发送邮件给多个接收者,以Html内容 * @param mailInfo 带发送邮件的信息 * @return */ public static boolean sendMailtoMultiReceiver(MultiMailSenderInfo mailInfo){ MyAuthenticator authenticator = null ; if (mailInfo.isValidate()) { authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); } Session sendMailSession = Session.getInstance(mailInfo .getProperties(), authenticator); try { Message mailMessage = new MimeMessage(sendMailSession); // 创建邮件发送者地址 Address from = new InternetAddress(mailInfo.getFromAddress()); mailMessage.setFrom(from); // 创建邮件的接收者地址,并设置到邮件消息中 Address[] tos = null ; String[] receivers = mailInfo.getReceivers(); if (receivers != null ){ // 为每个邮件接收者创建一个地址 tos = new InternetAddress[receivers.length + 1 ]; tos[ 0 ] = new InternetAddress(mailInfo.getToAddress()); for ( int i= 0 ; i<receivers.length; i++){ tos[i+ 1 ] = new InternetAddress(receivers[i]); } } else { tos = new InternetAddress[ 1 ]; tos[ 0 ] = new InternetAddress(mailInfo.getToAddress()); } // 将所有接收者地址都添加到邮件接收者属性中 mailMessage.setRecipients(Message.RecipientType.TO, tos); mailMessage.setSubject(mailInfo.getSubject()); mailMessage.setSentDate( new Date()); // 设置邮件内容 Multipart mainPart = new MimeMultipart(); BodyPart html = new MimeBodyPart(); html.setContent(mailInfo.getContent(), "text/html; charset=GBK" ); mainPart.addBodyPart(html); mailMessage.setContent(mainPart); // 发送邮件 Transport.send(mailMessage); return true ; } catch (MessagingException ex) { ex.printStackTrace(); } return false ; } /** * 发送带抄送的邮件 * @param mailInfo 待发送邮件的消息 * @return */ public static boolean sendMailtoMultiCC(MultiMailSenderInfo mailInfo){ MyAuthenticator authenticator = null ; if (mailInfo.isValidate()) { authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); } Session sendMailSession = Session.getInstance(mailInfo .getProperties(), authenticator); try { Message mailMessage = new MimeMessage(sendMailSession); // 创建邮件发送者地址 Address from = new InternetAddress(mailInfo.getFromAddress()); mailMessage.setFrom(from); // 创建邮件的接收者地址,并设置到邮件消息中 Address to = new InternetAddress(mailInfo.getToAddress()); mailMessage.setRecipient(Message.RecipientType.TO, to); // 获取抄送者信息 String[] ccs = mailInfo.getCcs(); if (ccs != null ){ // 为每个邮件接收者创建一个地址 Address[] ccAdresses = new InternetAddress[ccs.length]; for ( int i= 0 ; i<ccs.length; i++){ ccAdresses[i] = new InternetAddress(ccs[i]); } // 将抄送者信息设置到邮件信息中,注意类型为Message.RecipientType.CC mailMessage.setRecipients(Message.RecipientType.CC, ccAdresses); } mailMessage.setSubject(mailInfo.getSubject()); mailMessage.setSentDate( new Date()); // 设置邮件内容 Multipart mainPart = new MimeMultipart(); BodyPart html = new MimeBodyPart(); html.setContent(mailInfo.getContent(), "text/html; charset=GBK" ); mainPart.addBodyPart(html); mailMessage.setContent(mainPart); // 发送邮件 Transport.send(mailMessage); return true ; } catch (MessagingException ex) { ex.printStackTrace(); } return false ; } /** * 发送多接收者类型邮件的基本信息 */ public static class MultiMailSenderInfo extends MailSenderInfo{ // 邮件的接收者,可以有多个 private String[] receivers; // 邮件的抄送者,可以有多个 private String[] ccs; public String[] getCcs() { return ccs; } public void setCcs(String[] ccs) { this .ccs = ccs; } public String[] getReceivers() { return receivers; } public void setReceivers(String[] receivers) { this .receivers = receivers; } } }

第三个类:MyAuthenticator.java

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.util.mail; import javax.mail.*; public class MyAuthenticator extends Authenticator{ String userName= null ; String password= null ; public MyAuthenticator(){ } public MyAuthenticator(String username, String password) { this .userName = username; this .password = password; } protected PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication(userName, password); } }

下面给出使用上面三个类的代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public static void main(String[] args){ //这个类主要是设置邮件 MultiMailSenderInfo mailInfo = new MultiMailSenderInfo(); mailInfo.setMailServerHost( "smtp.163.com" ); mailInfo.setMailServerPort( "25" ); mailInfo.setValidate( true ); mailInfo.setUserName( "xxx@163.com" ); mailInfo.setPassword( "**********" ); //您的邮箱密码 mailInfo.setFromAddress( "xxx@163.com" ); mailInfo.setToAddress( "xxx@163.com" ); mailInfo.setSubject( "设置邮箱标题" ); mailInfo.setContent( "设置邮箱内容" ); String[] receivers = new String[]{ "***@163.com" , "***@tom.com" }; String[] ccs = receivers; mailInfo.setReceivers(receivers); mailInfo.setCcs(ccs); //这个类主要来发送邮件 MultiMailsender sms = new MultiMailsender(); sms.sendTextMail(mailInfo); //发送文体格式 MultiMailsender.sendHtmlMail(mailInfo); //发送html格式 MultiMailsender.sendMailtoMultiCC(mailInfo); //发送抄送

最后,给出朋友们几个注意的地方:
1、使用此代码你可以完成你的javamail的邮件发送功能、发多个邮箱。三个类缺一不可。
2、这三个类我打包是用的com.util.mail包,如果不喜欢,你可以自己改,但三个类文件必须在同一个包中
3、不要使用你刚刚注册过的邮箱在程序中发邮件,如果你的163邮箱是刚注册不久,那你就不要使用“smtp.163.com”。因为你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能通过验证。要使用你经常用的邮箱,而且时间比较长的。
4、另一个问题就是mailInfo.setMailServerHost("smtp.163.com");mailInfo.setFromAddress("xxx@163.com");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。
5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。

6、 然后在Android项目中添加网络访问权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>


更多相关文章

  1. android源代码编译
  2. android 模拟器中启用相机API支持
  3. android 自定义对话框
  4. List 去除一些默认设置
  5. android 项目中规范使用SharedPreferences
  6. 关于Android(安卓)设置监听的的四种方式的理解
  7. android 驱动文件权限设置
  8. Android控件属性大全[整理]
  9. Android:ViewPager制作幻灯片

随机推荐

  1. Android系统集成有源码的第三方库和程序
  2. android 代码设置EditText的hint字符
  3. Android(安卓)内存管理
  4. Android之入门:UI界面编程
  5. Android(安卓)Hook 机制之简单实战
  6. android 兼容各个版本 读取通讯录
  7. Android中用Application类实现全局数据变
  8. [置顶] Android类加载之PathClassLoader
  9. Android中的URI 和Uri
  10. Android(安卓)Service生命周期及用法!