gpt4 book ai didi

java - 获取错误连接失败,未指定密码?偶尔

转载 作者:行者123 更新时间:2023-11-29 07:40:21 26 4
gpt4 key购买 nike

我有一个奇怪的问题,我似乎无法解决。 :(我有一个基于 Web 的应用程序,可以发送电子邮件。它通过连接在本地网络上设置的基于 Windows 的 SMTP 服务器来实现。此 SMTP 服务器不需要我的代码中的用户名或密码即可发送电子邮件。一天中的大部分时间,有时是一周的大部分时间,一切都运行良好,电子邮件已发送,用户很高兴。然后不知从哪里冒出来,没有明显的原因,我开始在我的日志中看到异常:

javax.mail.AuthenticationFailedException: failed to connect, no password specified?
at javax.mail.Service.connect(Service.java:398)
at javax.mail.Service.connect(Service.java:245)
at javax.mail.Service.connect(Service.java:194)
at javax.mail.Transport.send0(Transport.java:253)
at javax.mail.Transport.send(Transport.java:124)

我将我的 java 邮件 jar 升级到最新版本,我猜这些天它叫做 javax.mail.far。我们运行的是 Tomcat 7 和 Windows Server 2008R2,邮件服务器是 Microsoft 的。

我不明白为什么这有时会起作用,但随后会无缘无故地停止。但我真正想做的是解决这个问题,让它不再出现。如果有人以前见过类似的东西并且有任何想法,我很乐意听取他们的意见。下面是发送电子邮件的 Java 代码:

 Properties props = System.getProperties();
if (mailhost != null)
props.setProperty("mail.smtp.host", mailhost);

// Get a Session object

Session session = Session.getDefaultInstance(props);
// Output the email in the log window
session.setDebug(true);

// construct the message
Message msg = new MimeMessage(session);
if (from != null)
msg.setFrom(new InternetAddress(from));
else
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email.getTo(), false));
if ((email.getCc() != null) && (email.getCc().length() > 0))
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(email.getCc(), false));
if ((email.getBcc() != null) && (email.getBcc().length() > 0))
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(email.getBcc(), false));

msg.setSubject(email.getSubject());

// Check if Attachment file exists
if ((attachmentFile != null) && (attachmentFile.getFileName() != null) &&
(attachmentFile.getFileName().length() > 0) )
{
MimeMultipart multipart = new MimeMultipart();
// Set the Message Text
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(email.getBody());
multipart.addBodyPart(messageBodyPart);
// Set the Message Attachment
MimeBodyPart attachmentBodyPart = new MimeBodyPart();
DataSource ds = new ByteArrayDataSource(attachmentFile.getInputStream(), attachmentFile.getContentType());
attachmentBodyPart.setDataHandler(new DataHandler(ds));
attachmentBodyPart.setFileName(attachmentFile.getFileName());

multipart.addBodyPart(attachmentBodyPart);
// If we also have a PDF attachment
if (PDFAtch != null)
{
MimeBodyPart pdfAttachmentBodyPart = new MimeBodyPart();
ds = new ByteArrayDataSource(PDFAtch.getAttachment(), "application/pdf");
pdfAttachmentBodyPart.setDataHandler(new DataHandler(ds));
pdfAttachmentBodyPart.setFileName(PDFAtch.getFilename());
multipart.addBodyPart(pdfAttachmentBodyPart);
}
// Put parts in message
msg.setContent(multipart);
}
else if (PDFAtch != null)
{
MimeMultipart multipart = new MimeMultipart();
// Set the Message Text
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(email.getBody());
multipart.addBodyPart(messageBodyPart);

MimeBodyPart pdfAttachmentBodyPart = new MimeBodyPart();
DataSource ds = new ByteArrayDataSource(PDFAtch.getAttachment(), "application/pdf");
pdfAttachmentBodyPart.setDataHandler(new DataHandler(ds));
pdfAttachmentBodyPart.setFileName(PDFAtch.getFilename());
multipart.addBodyPart(pdfAttachmentBodyPart);

msg.setContent(multipart);
}
else
msg.setText(email.getBody());

msg.setHeader("X-Mailer", "EWarranty MailSender");
msg.setSentDate(email.getDateSent());

// send the thing off
Transport.send(msg);

logger.debug("Message sent successfully to "+email.getTo());

预先感谢您提供的所有帮助。

最佳答案

为可能遇到类似问题的人发布答案。设置以下 2 个属性似乎已经成功了,至少到目前为止是这样。 :)

    props.setProperty("mail.smtp.auth", "false");
props.put("mail.smtp.port", "25"); // Default port

我和我的电子邮件管理员谈过,他告诉我我们的电子邮件服务器使用的主要端口实际上是 25。我没有改变创建 session 的方式。至少现在还没有。顺便说一句,Bill 提供的链接是一本优秀的读物,我强烈建议您点击它并阅读它。

谢谢大家

关于java - 获取错误连接失败,未指定密码?偶尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com