android实用技巧系列之使用javamail发送邮件
来源:互联网 发布:手机电信测速软件 编辑:程序博客网 时间:2024/05/19 13:42
在实际应用中经常会使用发送邮件的功能,由于项目的需要,需要使用固定的邮箱收集意见反馈信息,通过查阅资、
源,整合称了如下的发送邮件的demo ,此demo这是单独的从特定的邮箱发送到特定的邮箱的例子,如果需要根据发送
不同的邮箱地址,则可以在封装工具类中修改对应的代码即可,在测试之前你需要下载好javamail相关的2个jar包activation.jar和
mail.jar 。
1、邮件发送的核心类,注意如果是使用gmail发送邮件则必须添加这句代码,否则发送不能成功
props.put("mail.smtp.starttls.enable", "true");
import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;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 Mail {private MimeMessage mimeMsg; // MIME邮件对象private Session session; // 邮件会话对象private Properties props; // 系统属性private boolean needAuth = false; // smtp是否需要认证// smtp认证用户名和密码private String username;private String password;private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象/** * Constructor * * @param smtp * 邮件发送服务器 */public Mail(String smtp) {setSmtpHost(smtp);createMimeMessage();}/** * 设置邮件发送服务器 * * @param hostName * String */public void setSmtpHost(String hostName) {System.out.println("设置系统属性:mail.smtp.host = " + hostName);if (props == null)props = System.getProperties(); // 获得系统属性对象props.put("mail.smtp.host", hostName); // 设置SMTP主机props.put("mail.smtp.starttls.enable", "true"); // 在本行添加 ,gmail邮箱必须要设置}/** * 创建MIME邮件对象 * * @return */public boolean createMimeMessage() {try {System.out.println("准备获取邮件会话对象!");session = Session.getDefaultInstance(props, null); // 获得邮件会话对象} catch (Exception e) {System.err.println("获取邮件会话对象时发生错误!" + e);return false;}System.out.println("准备创建MIME邮件对象!");try {mimeMsg = new MimeMessage(session); // 创建MIME邮件对象mp = new MimeMultipart();return true;} catch (Exception e) {System.err.println("创建MIME邮件对象失败!" + e);return false;}}/** * 设置SMTP是否需要验证 * * @param need */public void setNeedAuth(boolean need) {System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);if (props == null)props = System.getProperties();if (need) {props.put("mail.smtp.auth", "true");} else {props.put("mail.smtp.auth", "false");}}/** * 设置用户名和密码 * * @param name * @param pass */public void setNamePass(String name, String pass) {username = name;password = pass;}/** * 设置邮件主题 * * @param mailSubject * @return */public boolean setSubject(String mailSubject) {System.out.println("设置邮件主题!");try {mimeMsg.setSubject(mailSubject);return true;} catch (Exception e) {System.err.println("设置邮件主题发生错误!");return false;}}/** * 设置邮件正文 * * @param mailBody * String */public boolean setBody(String mailBody) {try {BodyPart bp = new MimeBodyPart();bp.setContent("" + mailBody, "text/html;charset=GBK");mp.addBodyPart(bp);return true;} catch (Exception e) {System.err.println("设置邮件正文时发生错误!" + e);return false;}}/** * 添加附件 * * @param filename * String */public boolean addFileAffix(String filename) {System.out.println("增加邮件附件:" + filename);try {BodyPart bp = new MimeBodyPart();FileDataSource fileds = new FileDataSource(filename);bp.setDataHandler(new DataHandler(fileds));bp.setFileName(fileds.getName());mp.addBodyPart(bp);return true;} catch (Exception e) {System.err.println("增加邮件附件:" + filename + "发生错误!" + e);return false;}}/** * 设置发信人 * * @param from * String */public boolean setFrom(String from) {System.out.println("设置发信人!");try {mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人return true;} catch (Exception e) {return false;}}/** * 设置收信人 * * @param to * String */public boolean setTo(String to) {if (to == null)return false;try {mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));return true;} catch (Exception e) {return false;}}/** * 设置抄送人 * * @param copyto * String */public boolean setCopyTo(String copyto) {if (copyto == null)return false;try {mimeMsg.setRecipients(Message.RecipientType.CC,(Address[]) InternetAddress.parse(copyto));return true;} catch (Exception e) {return false;}}/** * 发送邮件 */public boolean sendOut() {try {mimeMsg.setContent(mp);mimeMsg.saveChanges();System.out.println("正在发送邮件....");Session mailSession = Session.getInstance(props, null);Transport transport = mailSession.getTransport("smtp");transport.connect((String) props.get("mail.smtp.host"), username,password);transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));// transport.send(mimeMsg);System.out.println("发送邮件成功!");transport.close();return true;} catch (Exception e) {System.err.println("邮件发送失败!" + e);return false;}}/** * 调用sendOut方法完成邮件发送 * * @param smtp * @param from * @param to * @param subject * @param content * @param username * @param password * @return boolean */public static boolean send(String smtp, String from, String to,String subject, String content, String username, String password) {Mail theMail = new Mail(smtp);theMail.setNeedAuth(true); // 需要验证if (!theMail.setSubject(subject))return false;if (!theMail.setBody(content))return false;if (!theMail.setTo(to))return false;if (!theMail.setFrom(from))return false;theMail.setNamePass(username, password);if (!theMail.sendOut())return false;return true;}/** * 调用sendOut方法完成邮件发送,带抄送 * * @param smtp * @param from * @param to * @param copyto * @param subject * @param content * @param username * @param password * @return boolean */public static boolean sendAndCc(String smtp, String from, String to,String copyto, String subject, String content, String username,String password) {Mail theMail = new Mail(smtp);theMail.setNeedAuth(true); // 需要验证if (!theMail.setSubject(subject))return false;if (!theMail.setBody(content))return false;if (!theMail.setTo(to))return false;if (!theMail.setCopyTo(copyto))return false;if (!theMail.setFrom(from))return false;theMail.setNamePass(username, password);if (!theMail.sendOut())return false;return true;}/** * 调用sendOut方法完成邮件发送,带附件 * * @param smtp * @param from * @param to * @param subject * @param content * @param username * @param password * @param filename * 附件路径 * @return */public static boolean send(String smtp, String from, String to,String subject, String content, String username, String password,String filename) {Mail theMail = new Mail(smtp);theMail.setNeedAuth(true); // 需要验证if (!theMail.setSubject(subject))return false;if (!theMail.setBody(content))return false;if (!theMail.addFileAffix(filename))return false;if (!theMail.setTo(to))return false;if (!theMail.setFrom(from))return false;theMail.setNamePass(username, password);if (!theMail.sendOut())return false;return true;}/** * 调用sendOut方法完成邮件发送,带附件和抄送 * * @param smtp * @param from * @param to * @param copyto * @param subject * @param content * @param username * @param password * @param filename * @return */public static boolean sendAndCc(String smtp, String from, String to,String copyto, String subject, String content, String username,String password, String filename) {Mail theMail = new Mail(smtp);theMail.setNeedAuth(true); // 需要验证if (!theMail.setSubject(subject))return false;if (!theMail.setBody(content))return false;if (!theMail.addFileAffix(filename))return false;if (!theMail.setTo(to))return false;if (!theMail.setCopyTo(copyto))return false;if (!theMail.setFrom(from))return false;theMail.setNamePass(username, password);if (!theMail.sendOut())return false;return true;}}
2、封装邮件发送工具类,其中MailInfoCfg.SMTP_SERVER_HOST是smtp服务器地址,常用的有如下
gmail:smtp.gmail.com
qq邮箱:smtp.qq.com
163邮箱:smpt.163.com
import com.uwen.halo.cfg.MailInfoCfg;import com.uwen.halo.data.email.Mail;import com.uwen.halo.data.email.MailSenderInfo;import com.uwen.halo.data.email.SimpleMailSender;/** * send email util * @author user * */public class EmailSendUtil {/** * send email * @param subject subject value is from MailInfoCfg.getSubject(); * @param mailContent */public static void sendEmail(String subject ,String mailContent){String smtp = MailInfoCfg.SMTP_SERVER_HOST;String from = MailInfoCfg.FROM_EMAIL_ADDRESS;String to = MailInfoCfg.TO_EMAIL_ADDRESS;String copyto = MailInfoCfg.COPT_TO_EMAIL_ADDRESS;String username = MailInfoCfg.FROM_EMAIL_ADDRESS;String password = MailInfoCfg.FROM_EMAIL_PASSWORD;Mail.sendAndCc(smtp, from, to, copyto, subject, mailContent, username,password);}}
3、调用
在需要调用的逻辑中使用最好是单独开启一个线程来调用,如下
public void send(){ String subject = ""这是一封测试的邮件;; String content = "这是测试的内容" new Thread(new Runnable() {@Overridepublic void run() { EmailSendUtil.sendEmail(subject ,content) ;} }).start();}
0 0
- android实用技巧系列之使用javamail发送邮件
- Android之使用JavaMail发送邮件
- Android之使用JavaMail发送邮件
- Android使用JavaMail 发送邮件
- android 使用JavaMail发送邮件
- JavaMail的使用之邮件发送
- JavaMail的使用之邮件发送 详解
- Android中使用JavaMail发送邮件
- Android应用使用JavaMail发送邮件
- Android中使用JavaMail发送邮件ZZ
- Android中使用JavaMail发送邮件ZZ
- Android 使用javaMail jar包 发送邮件
- android javamail发送邮件
- Android 发送邮件 JavaMail
- 使用JavaMail发送邮件
- 使用JavaMail发送邮件
- 使用javamail发送邮件
- 使用javaMail发送邮件
- 音视频文件码率与大小计算
- java.lang.IllegalStateException: Ambiguous mapping found.
- 环境篇-05:Eclipse打包APK
- 从Android Contacts应用看CursorLoader--CursorLoader篇
- Percona Toolkit安装
- android实用技巧系列之使用javamail发送邮件
- 几种流行Webservice框架性能对比
- 快速上手RaphaelJS--RaphaelJS_Starter翻译(三)
- ubuntu14 安装JDK
- 日期工具类
- linux 安装 Sphinx 2.2
- git 删除远程分支
- javascript基础知识梳理-数组 .
- 仿微信语音录制