我正在编写一个调度程序,使用压缩文本报告作为zip附件向某些ID发送电子邮件。报告我正在生成包含大量数据。所以我将它分成相等的部分并压缩它们。但是服务器拒绝发送邮件。以下是堆栈跟踪。
DEBUG SMTP:找到扩展名“TURN”,arg“”DEBUG SMTP:找到扩展名 “SIZE”,arg“2097152”52 4.3.1消息大小超过固定最大值 消息大小DEBUG SMTP:得到响应代码552,响应:552 4.3.1消息大小超过固定的最大消息大小RSET 250 2.0.0重置com.sun.mail.smtp.SMTPSendFailedException:552 4.3.1消息 大小超过固定的最大邮件大小 com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829) 在 com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1634) 在 com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:889) 在 org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:403) 在 org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:342) 在 org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:338) 在com.bi.spring.SpringMailer.sendMail(SpringMailer.java:57)at com.bi.core.InitiateMail.main(InitiateMail.java:40)
我已经与infra团队进行了核实。他们说最大附件限制为3MB。这里的问题是即使我将附件大小减小到1.2,1.5 mb,这也是12,15 mb的压缩文本文件。
以下调试消息对于任何附件大小保持相同
DEBUG SMTP:找到扩展名“SIZE”,arg“2097152”
我发送邮件的代码是:
public void sendMail(String dear, String content ,List<String> fileList) {
try
{
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
SimpleDateFormat format = new SimpleDateFormat ("MMMM yyyy");
Date date = calendar.getTime();
String dateString=format.format(date);
for(int i=0;i<fileList.size();i++)
{
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(simpleMailMessage.getFrom());
helper.setTo(simpleMailMessage.getTo());
helper.setText(String.format(simpleMailMessage.getText(), dear, content+dateString));
helper.setSubject(simpleMailMessage.getSubject()+dateString+" | Part-"+(i+1));
FileSystemResource file = new FileSystemResource(fileList.get(i));
helper.addAttachment(file.getFilename(), file);
try{
mailSender.send(message);
}
catch(Exception e){
Logger.log("Exception while sending the message|"+e.toString(),5);
e.printStackTrace();
}
file=null;
helper=null;
message=null;
}
}
catch (MessagingException e)
{
Logger.log("MessagingException in SpringMailer|sendMail() "+e.toString(), 5);
}
catch (MailParseException e)
{
Logger.log("MailParseException in SpringMailer|sendMail() "+e.toString(), 5);
}
catch (Exception e)
{
Logger.log("Exception in SpringMailer|sendMail() "+e.toString(), 5);
}
}
以上是发送电子邮件的主要代码。请告诉我我在这里缺少什么?
Edit1:我按照建议编辑了代码。现在异常消失了。但只有第一封邮件被送达。剩余的未送达。我从日志中观察以下调试消息。但剩下的邮件尚未送达。
排队邮件以进行投放 QUIT
Edit2:我已经和我们的infra团队核实过了。显然,SMTP服务器存在一些问题。切换到其他服务器后,它开始按预期工作。