【问题标题】:Sending Emails from java using specific Gmail accont使用特定的 Gmail 帐户从 java 发送电子邮件
【发布时间】:2016-04-25 09:30:59
【问题描述】:

我有一个从 Gmail 到我公司的电子邮件托管帐户,我正在尝试在 java 中从该帐户发送电子邮件,但遇到以下错误:

 javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbsF
534-5.7.14 i7ZvgRt2ia4HE_atVycPueORguLHg4yVG6hw_JGdAgbyUkBfJySVDR_XvkzLZzQp88F-UN
534-5.7.14 aoGU0uN-UBUR91zW7jsbzeq8Ojr6FEjFQcpsVKpv9GLaUPY3ee-pUk3Y6eNABFeA8DgDlu
534-5.7.14 fNDQwLg_R1I5-veyWJ8qE73R833F8PHWFuRanCjTkyPjQogqO-VrBG6omrZHsP3I-8Wphr
534-5.7.14 AjvaiqquhwnrUrmKjyk6RKaJnYaiA> Please log in via your web browser and
534-5.7.14 then try again.
534-5.7.14  Learn more at
534 5.7.14  https://support.google.com/mail/answer/78754 w77sm17182835wmw.10 - gsmtp

这是我的代码中使用的属性:

    final String username = "email@mycompnay.com";
    final String password = "********";


    final String host = "smtp.gmail.com";
    final String port = "587";

    // Creating Properties object
    Properties props = new Properties();
    // Defining properties
    props.put("mail.smtp.host", host);
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");

    props.put("mail.user", username);
    props.put("mail.password", password);
    props.put("mail.port", port);

    // Authorized the Session object.
    Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });

所以要明确一点,我的电子邮件是 (myemail@mycompany.com),而 mycompany.com 的电子邮件托管在 Gmail 上。 如果我用像 (email@gmail.com) 这样的 Gmail 电子邮件替换我的电子邮件,它可以正常工作,那么这里的问题是什么以及如何解决它。

【问题讨论】:

  • 下面的很多建议都是错误的,只会让代码更复杂。请参阅common JavaMail mistakes 的列表。您是否按照错误消息和login with your browser 中的说明进行操作?
  • 是的,我做了,但什么也没发生

标签: java email gmail jakarta-mail


【解决方案1】:

我认为您的属性有问题 mail.smtp.port, mail.smtp.socketFactory.port

如果不是,请指定并更改端口号应该对您有用。

试试这组属性...你的代码必须工作(从我正在运行的项目中添加的工作代码)

            v_objProperties = new Properties();
            v_objProperties.put("mail.smtp.host","smtp.gmail.com");  
            v_objProperties.put("mail.smtp.auth", "true");  
            v_objProperties.put("mail.debug", "false");  
            v_objProperties.put("mail.smtp.port",25);  
            v_objProperties.put("mail.smtp.socketFactory.port",25);  
            v_objProperties.put("mail.smtp.starttls.enable", "true");
            v_objProperties.put("mail.transport.protocol", "smtp");
            v_objSession = Session.getInstance(v_objProperties, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("abc@abc.com", "*********");
                }
            });

【讨论】:

    【解决方案2】:

    首先,将这段代码修复如下props.put("mail.port", port);

    props.put("mail.smtp.port", port);
    

    对于host,您的编码仅适用于@gmail.com 的一部分。它不适用于自己的域 gmail 服务(例如 ****@abc.com)。 大多数情况下,它使用SSL。这就是为什么,需要通过授权人/帐户来配置邮件设置。

    参考:SSL using in Javamkyoung

    【讨论】:

      猜你喜欢
      • 2012-03-30
      • 2013-03-24
      • 2016-04-20
      • 2011-04-06
      • 2011-12-15
      • 2013-12-19
      • 2011-03-08
      • 2016-10-31
      • 1970-01-01
      相关资源
      最近更新 更多