使用Camel和Java发送电子邮件。 ISSUE STARTTLS错误

时间:2014-04-23 15:02:25

标签: java apache smtp apache-camel

我知道之前已经问过这个问题,但我尝试了几个解决方案,问题仍然存在,所以非常感谢帮助。

我正在尝试配置通过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&amp;port=587&amp;from=p****is@gmail.comi&amp;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命令。

任何想法都会非常感激。

3 个答案:

答案 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&amp;port=587&amp;from=p****is@gmail.comi&amp;password=gl******" />
  </camel:route>
</camel:camelContext>

答案 2 :(得分:0)

要从Camel发送到Gmail,您需要以下内容: -

  1. KeyStore中的Gmail SMTP证书(即OpenSSL或Python脚本以及Java KeyTool)
  2. 允许不太安全的应用程序(不可取)
  3. 或使用您的路线的应用密码设置两步验证
  4. 已配置SSLContextParameters
  5. 您可以使用列出的以下说明来完成以下步骤: -
    https://mpashworth.wordpress.com/2017/05/03/sending-email-to-gmail-in-apache-camel/