Java给单个或多个用户发送邮件

来源:互联网 发布:金山软件管家 编辑:程序博客网 时间:2024/04/27 21:09

 》Java给用户发送邮件   作者:左轩、Shiny

  Jar包:

           mail.jar 同时高版本JDK中可能存在java.mail冲突。解决方案  找到 EE_5 下的目录 删除 javaee.jar下的mail文件夹。

     一、思路详解:

           1、一个继承用户连接的类MailAuthenticator继承于MailAuthenticator.为后面的session实例化 作为参数 获取用户连接服务器

           2、Message类实例化依赖于session.然后设置发件人、收件人、发件主题、发件内容

           3、Transport类用户发送邮件

    二、技术详解

           1、message.setRecipients(RecipientType.TO, addresses); 中第二个参数是Address[] address  所以要把String,List<String>,String[]

                向其转型、可以用多台实现。

 MailAuthenticator.java

 

package com.huawei.ssi.util;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;/** *  * @author Shiny * */public class MailAuthenticator extends Authenticator {private String uemail;private String upass;public MailAuthenticator() {// TODO Auto-generated constructor stub}public MailAuthenticator(String uemail,String upass) {this.uemail = uemail;this.upass = upass;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(uemail, upass);};public String getUemail() {return uemail;}public void setUemail(String uemail) {this.uemail = uemail;}public String getUpass() {return upass;}public void setUpass(String upass) {this.upass = upass;}}


 

SimpleMailSender.java

 

 

package com.huawei.ssi.util;import java.util.ArrayList;import java.util.List;import java.util.Properties;import javax.mail.Address;import javax.mail.Session;import javax.mail.Transport;import javax.mail.Message.RecipientType;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class SimpleMailSender {private final transient Properties pros = System.getProperties();private transient MailAuthenticator mailAuthenticator;//与邮箱服务器的会话private transient Session session;/** *  * @param smtpHostName   "smtp.qq.com" || "smtp.sina.com" * @param uemail "1197407855@qq.com" * @param upass "******" */public SimpleMailSender(final String smtpHostName,final String uemail,final String upass) {init(uemail, upass, smtpHostName);}/** *  * @param uemail  邮箱账号 * @param upass     邮箱密码 */public SimpleMailSender(final String uemail,final String upass) {//通过邮箱获取到smtp final String smtpHostName = "smtp."+uemail.split("@")[1];init(uemail, upass, smtpHostName);}/** * 初始化 * @param uemail * @param upass * @param smtpHostName */private void init(String uemail,String upass,String smtpHostName){pros.put("mail.smtp.auth", "true");pros.put("mail.smtp.host", smtpHostName);mailAuthenticator = new MailAuthenticator(uemail,upass);//实例化会话session = Session.getInstance(pros,mailAuthenticator);}/** *  * @param recpient * @return * @throws Exception */public Address[] getRecipientAddresses(String[] recpient) throws Exception{Address[] address=new Address[recpient.length];for(int i=0;i<recpient.length;i++){address[i]=new InternetAddress(recpient[i]);}return address;}/** *  * @param recpient * @return * @throws AddressException */public Address[] getRecipientAddresses(List<String> recpient) throws Exception{Address[] address=new Address[recpient.size()];for(int i=0;i<recpient.size();i++){address[i]=new InternetAddress(recpient.get(i));}return address;}/** *  * @param recpient * @return * @throws Exception */public Address[] getRecipientAddresses(String recpient) throws Exception{Address[] addresses = {new InternetAddress(recpient)};return addresses;}/** *  * @param recipient * @param subject * @param content * @throws Exception */@SuppressWarnings("unused")private void sendMail(String recipient,String subject,String content) throws Exception{this.sendMail(this.getRecipientAddresses(recipient), subject, content);}/** *  * @param recipient * @param subject * @param content * @throws Exception */private void sendMail(String[] recipient,String subject,String content) throws Exception{this.sendMail(this.getRecipientAddresses(recipient), subject, content);}/** *  * @param recipient * @param subject * @param content * @throws Exception */@SuppressWarnings("unused")private void sendMail(List<String> recipient,String subject,String content) throws Exception{this.sendMail(this.getRecipientAddresses(recipient), subject, content);}/** * 实现方法  发送邮件  可发送单个用户 也可以发送多个 * @param addresses * @param subject * @param content * @throws Exception */public void sendMail(Address[] addresses,String subject,String content) throws Exception{//通过session实例化message 即一封邮件final MimeMessage message = new MimeMessage(session);//设置发邮件人message.setFrom(new InternetAddress(mailAuthenticator.getUemail()));//设置收件人message.setRecipients(RecipientType.TO, addresses); //邮件标题message.setSubject(subject);//邮件内容message.setContent(content,"text/html;charset=utf-8");//发送Transport.send(message);}public static void main(String[] args)throws Exception {SimpleMailSender sms = new SimpleMailSender("1197407855@qq.com", "*******");//******密码String[] str={"1197407855@qq.com","1259099190@qq.com"};//sms.sendMail("1259099190@qq.com", "SB", "你是sb!");sms.sendMail(str, "SB11", "你是sb22!");//List<String> list = new ArrayList<String>();////list.add("1197407855@qq.com");//list.add("1259099190@qq.com");//sms.sendMail(list, "333773344", "aaaaaa");}}