gpt4 book ai didi

java - 必须发出 STARTTLS 命令

转载 作者:搜寻专家 更新时间:2023-11-01 01:10:31 25 4
gpt4 key购买 nike

我正在尝试通过 log4j 发送错误电子邮件。通过使用以下附加程序:

 <appender name="ERROR_MAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="SMTPUsername" value="xxxxxx@gmail.com" />
<param name="SMTPPassword" value="**********" />
<param name="To" value="test@gmail.com"/>
<param name="From" value="xxxxxx@gmail.com"/>
<param name="Subject" value="Newyse Error "/>
<param name="SMTPHost" value="smtp.gmail.com"/>
<param name="SMTPPort" value="25" />
<param name="BufferSize" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{ISO8601} %t %5p %c:$L]"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>

但是我得到以下异常

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. wr9sm43519864pbc.7 - gsmtp

从其他几个问题我了解到我需要在 smtpAppender

中添加以下属性
props.put("mail.smtp.starttls.enable", "true");

那么我们如何将它添加到现有的 SMTPAppender 中呢?

最佳答案

第一种方式:您可以扩展 SMTP appender 并覆盖 createSession() 方法,您可以在其中向 Java Mail session 添加任何其他属性,如前面提到的“mail.smtp.starttls.enable”

public class SecureSMTPAppender extends SMTPAppender {

private boolean useStartTLS;

public void setUseStartTLS(boolean useStartTLS) {
this.useStartTLS = useStartTLS;
}

@Override
protected Session createSession() {
Properties props = null;
try {
props = new Properties(System.getProperties());
} catch (SecurityException ex) {
props = new Properties();
}
if (getSMTPHost() != null) {
props.put("mail.smtp.host", getSMTPHost());
}
if (useStartTLS) {
props.put("mail.smtp.starttls.enable", "true");
}
Authenticator auth = null;
if (getSMTPPassword() != null && getSMTPUsername() != null) {
props.put("mail.smtp.auth", "true");
auth = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(getSMTPUsername(), getSMTPPassword());
}
};
}
Session session = Session.getInstance(props, auth);
if (getSMTPDebug()) {
session.setDebug(true);
}
return session;
}
}

第二种方式:您可以使用选项 -Dmail.smtp.starttls.enable=true 启动您的 Java 进程。这种方法看起来更简单,但需要控制 JVM 选项;它也可能被过于严格的 SecurityManager 破坏。

关于java - 必须发出 STARTTLS 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18208982/

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