问题描述
- 关于Javax.mail的554异常
-
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
解决方案
............................
解决方案二:
初试javax.mail
时间: 2024-08-03 15:38:52