Android 实现发邮件,使用JavaMail方式实现
2014-07-01 09:33
211 查看
MailSenderInfo 类
MultiMailsender 类
MyAuthenticator 类
MainActivity 类,使用上面3个类,实现发邮件
package com.example.mailtestdemo;
import com.example.mailtestdemo.MultiMailsender.MultiMailSenderInfo;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.app.Activity;
public class MainActivity extends Activity {
@SuppressLint({ "NewApi", "NewApi" })
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
// 这个类主要是设置邮件
MultiMailSenderInfo mailInfo = new MultiMailSenderInfo();
mailInfo.setMailServerHost("smtp.163.com"); // smtp.qq.com,smtp.sohu.com,smtp.163.com
mailInfo.setMailServerPort("25"); // smtp 端口:25
mailInfo.setValidate(true);
mailInfo.setUserName("xxxxx@163.com");
mailInfo.setPassword("xxxx");// 您的邮箱密码
mailInfo.setFromAddress("xxx@163.com");
mailInfo.setToAddress("sproutting@sohu.com");
// mailInfo.setToAddress("xxx@sina.cn");
// mailInfo.setToAddress("xxx@qq.com");
// mailInfo.setToAddress("xxx@126.com");
mailInfo.setSubject("设置邮箱标题");
mailInfo.setContent("设置邮箱内容");
String[] receivers = new String[]{"281406222@qq.com"};
String[] ccs = receivers;
mailInfo.setReceivers(receivers);
mailInfo.setCcs(ccs);
// 这个类主要来发送邮件
MultiMailsender sms = new MultiMailsender();
sms.sendTextMail(mailInfo);// 发送文体格式
MultiMailsender.sendHtmlMail(mailInfo);//发送html格式
MultiMailsender.sendMailtoMultiCC(mailInfo);//发送抄送
}
}
}
这个项目需要导入activation.jar,additionnal.jar,mail.jar,把这三个jar复制到项目下的libs文件夹下
package com.example.mailtestdemo; 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 = true; // 邮件主题 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", "true"); //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[] attachFileNames(){ 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 getToAddress(){ return toAddress; } public void setToAddress(String toAddress){ this.toAddress = toAddress; } public String getPassword(){ return password; } public void setPassword(String password){ this.password = password; } 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 类
package com.example.mailtestdemo; 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 { /** * 以文本格式发送邮件 */ 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); } catch (MessagingException e) { e.printStackTrace(); } return false; } /** * 发送邮件给多个接收者,以Html内容 * @param mailInfo 带发送邮件的信息 * <a href="http://my.oschina.net/u/556800" class="referer" target="_blank">@return</a> */ public static boolean sendHtmlMail(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 待发送邮件的消息 * <a href="http://my.oschina.net/u/556800" class="referer" target="_blank">@return</a> */ 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){ // 为每个邮件接收者创 4000 建一个地址ᅱᄋ 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[] getReceivers() { return receivers; } public void setReceivers(String[] receviers) { this.receivers = receviers; } public String[] getCcs() { return ccs; } public void setCcs(String[] ccs) { this.ccs = ccs; } } }
MyAuthenticator 类
package com.example.mailtestdemo; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; 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); } }
MainActivity 类,使用上面3个类,实现发邮件
package com.example.mailtestdemo;
import com.example.mailtestdemo.MultiMailsender.MultiMailSenderInfo;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.app.Activity;
public class MainActivity extends Activity {
@SuppressLint({ "NewApi", "NewApi" })
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
// 这个类主要是设置邮件
MultiMailSenderInfo mailInfo = new MultiMailSenderInfo();
mailInfo.setMailServerHost("smtp.163.com"); // smtp.qq.com,smtp.sohu.com,smtp.163.com
mailInfo.setMailServerPort("25"); // smtp 端口:25
mailInfo.setValidate(true);
mailInfo.setUserName("xxxxx@163.com");
mailInfo.setPassword("xxxx");// 您的邮箱密码
mailInfo.setFromAddress("xxx@163.com");
mailInfo.setToAddress("sproutting@sohu.com");
// mailInfo.setToAddress("xxx@sina.cn");
// mailInfo.setToAddress("xxx@qq.com");
// mailInfo.setToAddress("xxx@126.com");
mailInfo.setSubject("设置邮箱标题");
mailInfo.setContent("设置邮箱内容");
String[] receivers = new String[]{"281406222@qq.com"};
String[] ccs = receivers;
mailInfo.setReceivers(receivers);
mailInfo.setCcs(ccs);
// 这个类主要来发送邮件
MultiMailsender sms = new MultiMailsender();
sms.sendTextMail(mailInfo);// 发送文体格式
MultiMailsender.sendHtmlMail(mailInfo);//发送html格式
MultiMailsender.sendMailtoMultiCC(mailInfo);//发送抄送
}
}
}
这个项目需要导入activation.jar,additionnal.jar,mail.jar,把这三个jar复制到项目下的libs文件夹下
相关文章推荐
- android使用继承的方式实现底部菜单栏
- Android中使用4种方式实现按钮点击操作
- Android无网络状态下使用GPS定位到省市县的一种简单实现方式
- Android使用AIDL方式实现播放音乐案例
- Android使用Fragment嵌套Fragment的方式实现界面滑动
- android App异常报错捕获后使用javamail登录QQ邮箱发邮件的功能遇到的问题
- Android Gradle 常用使用场景实现方式的总结
- Android Gradle 常用使用场景实现方式的总结
- Android中ListView同过自定义布局并使用SimpleAdapter的方式实现数据的绑定
- Android换肤功能实现与换肤框架QSkinLoader使用方式介绍
- Android 使用Get方式实现断点下载(一)
- Android使用ftp方式实现文件上传和下载
- 使用匿名管道双向通讯的方式,实现pc端和Android端通讯。
- Android 定时器的实现方式(TimerTask、Handler)及 Handler使用解析
- android使用setTheme的方式实现主题切换
- Android 定时器的实现方式(TimerTask、Handler)及 Handler使用解析
- 使用基于Android网络通信的OkHttp库实现Get和Post方式简单操作服务器JSON格式数据
- Android Gradle 常用使用场景实现方式的总结
- Android使用最简单的方式实现ListView 拉出回弹效果,阻尼效果(一)
- ANDROID使用MULTIPARTENTITYBUILDER实现类似FORM表单提交方式的文件上传