使用 Javamail 发送电子邮件时出错:com.sun.mail.smtp.SMTPSenderFailedException: 550 5.1.0 *@* 发件人被拒绝
Error sendin email with Javamail: com.sun.mail.smtp.SMTPSenderFailedException: 550 5.1.0 *@* sender rejected
我正在尝试通过 Javamail 以编程方式向一组收件人发送电子邮件。我设置了一个 MimeMessagePreparator 并将其传递给 JavaMailSenderImpl,但是在发送电子邮件时我得到以下信息:
org.springframework.mail.MailSendException: Failed messages:
com.sun.mail.smtp.SMTPSendFailedException: 550 5.1.0
<mycomputer!!> sender rejected
所以,发件人看起来像我的电脑。
这是我的代码:
public class EmailNotifier {
private JavaMailSenderImpl mailSender;
@Value("${application.mail.sender.address}")
private String senderEmail;
@Value("${application.mail.subject}")
private String emailSubject;
@Value("${application.mail.sender.address}")
private String senderAddress;
@Value("${application.mail.sender.password}")
private String senderPassword;
@Value("${application.mail.server.outgoing.port}")
private int outgoingPort;
@Value("${application.mail.server.outgoing}")
private String outgoingServer;
@Value("${application.mail.content}")
private String contentTemplate;
private static String BODY_CONTENT_TYPE = "text/html; charset=utf-8";
private static String PDF_CONTENT_TYPE = "application/pdf";
@PostConstruct
public void init() {
mailSender = new JavaMailSenderImpl();
mailSender.setPassword(senderPassword);
mailSender.setUsername(senderAddress);
mailSender.setPort(outgoingPort);
mailSender.setHost(outgoingServer);
}
public void sendEmail(InputStream pdfInputStream, String aRecipient) throws MessagingException {
final String commaSeparatedRecipientsEmail = getRecipients();
String content = contentTemplate;
MimeMessagePreparator msgPreparator = new MimeMessagePreparator() {
public void prepare(MimeMessage msg) throws Exception {
msg.addRecipients(Message.RecipientType.TO, emailsAgenzia);
msg.setSubject(emailSubject.replace(emailSubject);
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent(content, BODY_CONTENT_TYPE);
MimeBodyPart attachmentPart = new MimeBodyPart();
ByteArrayDataSource pdf = new ByteArrayDataSource(pdfInputStream, PDF_CONTENT_TYPE);
attachmentPart.setDataHandler(new DataHandler(pdf));
String fileName = getFilename();
attachmentPart.setFileName(fileName);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
multipart.addBodyPart(attachmentPart);
msg.setContent(multipart);
}
};
this.mailSender.send(msgPreparator);
}
}
怎么了?
这是一个 DNS 问题。您必须在 DNS 系统中插入您的发件人地址。
https://digitaltoolfactory.net/blog/2010/03/how-to-fix-the-550-5-1-0-address-rejected-email-problem/
或者邮件地址无效。
我最终不得不放弃 JavaMailSenderImpl 并使用较低级别的 API(Javamail 基本 类 而不是 Spring 类)。
我正在尝试通过 Javamail 以编程方式向一组收件人发送电子邮件。我设置了一个 MimeMessagePreparator 并将其传递给 JavaMailSenderImpl,但是在发送电子邮件时我得到以下信息:
org.springframework.mail.MailSendException: Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 550 5.1.0 <mycomputer!!> sender rejected
所以,发件人看起来像我的电脑。
这是我的代码:
public class EmailNotifier {
private JavaMailSenderImpl mailSender;
@Value("${application.mail.sender.address}")
private String senderEmail;
@Value("${application.mail.subject}")
private String emailSubject;
@Value("${application.mail.sender.address}")
private String senderAddress;
@Value("${application.mail.sender.password}")
private String senderPassword;
@Value("${application.mail.server.outgoing.port}")
private int outgoingPort;
@Value("${application.mail.server.outgoing}")
private String outgoingServer;
@Value("${application.mail.content}")
private String contentTemplate;
private static String BODY_CONTENT_TYPE = "text/html; charset=utf-8";
private static String PDF_CONTENT_TYPE = "application/pdf";
@PostConstruct
public void init() {
mailSender = new JavaMailSenderImpl();
mailSender.setPassword(senderPassword);
mailSender.setUsername(senderAddress);
mailSender.setPort(outgoingPort);
mailSender.setHost(outgoingServer);
}
public void sendEmail(InputStream pdfInputStream, String aRecipient) throws MessagingException {
final String commaSeparatedRecipientsEmail = getRecipients();
String content = contentTemplate;
MimeMessagePreparator msgPreparator = new MimeMessagePreparator() {
public void prepare(MimeMessage msg) throws Exception {
msg.addRecipients(Message.RecipientType.TO, emailsAgenzia);
msg.setSubject(emailSubject.replace(emailSubject);
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent(content, BODY_CONTENT_TYPE);
MimeBodyPart attachmentPart = new MimeBodyPart();
ByteArrayDataSource pdf = new ByteArrayDataSource(pdfInputStream, PDF_CONTENT_TYPE);
attachmentPart.setDataHandler(new DataHandler(pdf));
String fileName = getFilename();
attachmentPart.setFileName(fileName);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
multipart.addBodyPart(attachmentPart);
msg.setContent(multipart);
}
};
this.mailSender.send(msgPreparator);
}
}
怎么了?
这是一个 DNS 问题。您必须在 DNS 系统中插入您的发件人地址。
https://digitaltoolfactory.net/blog/2010/03/how-to-fix-the-550-5-1-0-address-rejected-email-problem/
或者邮件地址无效。
我最终不得不放弃 JavaMailSenderImpl 并使用较低级别的 API(Javamail 基本 类 而不是 Spring 类)。