》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;
}
@Override
protected 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");
}
}