import java.io.File;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.swing.JOptionPane;
public class MailSender {
private final transient Properties props = System.getProperties();// 发送邮件的props文件
private transient MailAuthenticator authenticator;// 邮件服务器登录验证
private transient Session session;// 邮箱session
/*
* 初始化邮件发送器
*
* @param smtpHostName SMTP邮件服务器地址
*
* @param username 发送邮件的用户名(地址)
*
* @param password 发送邮件的密码
*/
public MailSender(final String smtpHostName, final String username, final String password) {
init(username, password, smtpHostName);
}
/*
* 初始化邮件发送器
*
* @param username 发送邮件的用户名(地址),并以此解析SMTP服务器地址
*
* @param password 发送邮件的密码
*
*/
public MailSender(final String username, final String password) {
// 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用
final String smtpHostName = "smtp." + username.split("@")[1];
init(username, password, smtpHostName);
}
private void init(String username, String password, String smtpHostName) {
// 初始化props
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", smtpHostName);
// 验证
authenticator = new MailAuthenticator(username, password);
// 创建session
session = Session.getInstance(props, authenticator);
}
/*
* 群发邮件
*
* @param recipients 收件人们
*
* @param subject 主题
*
* @param content 内容
*
*/
public void send(String[] recipients, String subject, String content, String filename)
throws AddressException, MessagingException {
// System.out.println(props.getProperty("mail.smtp.host"));
// 创建mime类型邮件
final MimeMessage message = new MimeMessage(session);
Multipart multipart = new MimeMultipart();
// 设置发信人
message.setFrom(new InternetAddress(authenticator.getUserName()));
// 设置收件人们
final int num = recipients.length;
InternetAddress[] addresses = new InternetAddress[num];
for (int i = 0; i < num; i++) {
addresses[i] = new InternetAddress(recipients[i]);
}
message.setRecipients(RecipientType.TO, addresses);
// 设置主题
message.setSubject(subject);
// 设置邮件内容
BodyPart bodypart = new MimeBodyPart();
bodypart.setContent(content.toString(), "text/html;charset=utf-8");
multipart.addBodyPart(bodypart);
// 添加附件
if (new File(filename).exists()) {
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(fileds.getName());
multipart.addBodyPart(bp);
} else {
int n = JOptionPane.showConfirmDialog(null, "找不到压缩文件是否继续?", "找不到压缩文件", JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.NO_OPTION) {
throw new RuntimeException();
}
}
// 将multipart对象放到message中
message.setContent(multipart);
// 保存邮件
message.saveChanges();
// 发送
Transport.send(message);
}
}
```为什么QQ邮箱跟139手机邮箱都测试成功,126却老是报错
Could not connect to SMTP host: SMTP.126.com, port: 25, response: 554
............................