本文主要讲述java使用smtp发送邮件的方法,该博客以QQ邮箱为例,废话不多说上代码:
java代码
下面为Email邮件类的代码:
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class Email {
@SuppressWarnings("static-access")
public static void massSendHTML(EmailDetail ed){
try {
Properties props = new Properties();
props.put("mail.smtp.host", ed.getSmtpHost());
props.put("mail.smtp.starttls.enable", "true"); //使用 STARTTLS安全连接
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true"); //使用验证
props.put("mail.debug", "true");
Session mailSession = Session.getInstance(props, new MyAuthenticator(ed.getUsername(), ed.getPassword()));
InternetAddress fromAddress = new InternetAddress(ed.getUsername());
String[] mailTo = ed.getMassTo();
int len = mailTo.length ;
Address toAddress[] = new InternetAddress[len];
for(int i=0;i<len;i++){
toAddress[i] = new InternetAddress(mailTo[i]);
}
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(ed.getContents(), "text/html; charset=utf-8");
//向multipart中添加附件
Vector<File> file = ed.getFile();
String fileName = ed.getFileName();
Enumeration<File> efile = file.elements();
while(efile.hasMoreElements()){
MimeBodyPart mdpFile = new MimeBodyPart();
fileName = efile.nextElement().toString();
FileDataSource fds = new FileDataSource(fileName);
mdpFile.setDataHandler(new DataHandler(fds));
mdpFile.setFileName(MimeUtility.encodeWord(fds.getName()));
mainPart.addBodyPart(mdpFile);
}
file.removeAllElements();
mainPart.addBodyPart(html);
MimeMessage message = new MimeMessage(mailSession);
message.setFrom(fromAddress);
message.addRecipients(RecipientType.TO, toAddress);
message.setSentDate(Calendar.getInstance().getTime());
message.setSubject(ed.getTitle());
message.setContent(mainPart, ed.getUtftype());
Transport transport = mailSession.getTransport("smtp");
transport.connect(ed.getSmtpHost(), ed.getUsername(), ed.getPassword());
transport.send(message, message.getRecipients(RecipientType.TO));
} catch (MessagingException | UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
EmailDetail ed = new EmailDetail();
ed.setSmtpHost("smtp.qq.com");
ed.setUsername("XXXXXXXXX@qq.com");
ed.setPassword("XXXXXXXXXXXXXXX");
String mass[] = {"XXXXXXXXX@qq.com","XXXXXXXXX@qq.com"};
ed.setMassTo(mass);
ed.setTitle("QQ邮件发送测试");
ed.setContents("QQ升级提醒:进入<a href='http://blog.csdn.net/u012682006/article/details/50723672'>点击查看详情</a></br>摸摸哒~");
ed.setUtftype("text/html;charset=utf-8");
/** 附件 */
/* Vector<File> file = new Vector<File>() ;
File f = new File("D:/日积月累/Study/新建文本文档.txt");
file.add(f);
ed.setFile(file);*/
Email.massSendHTML(ed);
}
}
class MyAuthenticator extends Authenticator {
String userName = "";
String password = "";
public MyAuthenticator() {
}
public MyAuthenticator(String userName, String password) {
this.userName = userName;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
实体类代码
import java.io.File;
import java.util.Vector;
public class EmailDetail {
String smtpHost; /**smtp*/
String username; /**账号*/
String password; /**密码*/
String to; /**收件人-单个*/
String massTo[]; /**收件人-多个*/
String title; /**标题*/
String contents; /**内容*/
String utftype; /**编码方式*/
String fileName = "" ; /** 邮件附件的文件名 */
Vector<File> file = new Vector<File>() ; /**附件文件集合 */
public String getSmtpHost() {
return smtpHost;
}
public void setSmtpHost(String smtpHost) {
this.smtpHost = smtpHost;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public String getUtftype() {
return utftype;
}
public void setUtftype(String utftype) {
this.utftype = utftype;
}
public String[] getMassTo() {
return massTo;
}
public void setMassTo(String[] massTo) {
this.massTo = massTo;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public Vector<File> getFile() {
return file;
}
public void setFile(Vector<File> file) {
this.file = file;
}
}
邮箱设置
登录邮箱,进入设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
设置完成后会收到一个授权吗,然后修改password为授权码,否则发送邮件时验证不会通过,会抛出异常,然后就可以发送邮件了,163邮箱也需要设置,不过授权码是自己设置的。