我知道之前已经问过这个问题,但我尝试了几个解决方案,问题仍然存在,所以非常感谢帮助。
我正在尝试配置通过gmail和smtp发送电子邮件。以下是我们的驼峰配置:
<camel:camelContext xmlns="http://camel.apache.org/schema/spring">
<camel:route id="gmailRoute">
<camel:from uri="direct://gmail" />
<camel:to
uri="smtp://p****is@gmail.com?host=smtp.gmail.com&port=587&from=p****is@gmail.comi&password=gl******" />
</camel:route>
在我们的服务实现的init方法中,我们有以下内容:
log.info("Initializing Email Service");
Properties props = new Properties();
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.googlemail.com");
props.put("mail.smtp.port", "587");
Authenticator auth = null;
props.put("mail.smtp.auth", "true");
auth = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("******akis@gmail.com", "gl*****s");
}
};
Session t = Session.getInstance(props, auth);
template = camelContext.createProducerTemplate();
以及我们的sendmail方法:
@Override
public void sendEmail(String from, String[] to, String[] cc, String[] bcc, String subject, String body)
{
String endpoint = "direct://gmail";
String toString = null;
String ccString = null;
String bccString = null;
Map<String, Object> headers = null;
toString = convertStringArrayToCSV(to);
ccString = convertStringArrayToCSV(cc);
bccString = convertStringArrayToCSV(bcc);
headers = new HashMap<String, Object>();
headers.put("Subject", subject);
if (toString != null)
{
headers.put("To", toString);
}
if (ccString != null)
{
headers.put("CC", ccString);
}
if (bccString != null)
{
headers.put("BCC", bccString);
}
template.sendBodyAndHeaders(endpoint, body, headers);
}
问题是,当我们尝试使用sendmail方法发送电子邮件时,我们会收到以下错误:
捕获:com.sun.mail.smtp.SMTPSendFailedException:530 5.7.0必须首先发出STARTTLS命令。
任何想法都会非常感激。
答案 0 :(得分:2)
对于Gmail,这似乎是要走的路:
smtp://smtp.gmail.com?port=587&username=USERNAME@gmail.com&password=PASSOWRD&mail.smtp.auth=true&mail.smtp.starttls.enable=true
最后一个参数是您的错误消息抱怨的那个参数。基本上,您列出的Java代码中的所有自定义SMTP参数都需要位于Camel端点中。
答案 1 :(得分:0)
您似乎使用TLS安全性来发送电子邮件,但使用邮件组件的非安全版本。你能尝试将smtp改为smtps吗?
<camel:camelContext xmlns="http://camel.apache.org/schema/spring">
<camel:route id="gmailRoute">
<camel:from uri="direct://gmail" />
<camel:to uri="smtps://p****is@gmail.com?host=smtp.gmail.com&port=587&from=p****is@gmail.comi&password=gl******" />
</camel:route>
</camel:camelContext>
答案 2 :(得分:0)
要从Camel发送到Gmail,您需要以下内容: -
您可以使用列出的以下说明来完成以下步骤: -
https://mpashworth.wordpress.com/2017/05/03/sending-email-to-gmail-in-apache-camel/