【问题标题】:Mail sending without authentication using Java Mail Api使用 Java Mail Api 发送未经身份验证的邮件
【发布时间】:2015-12-23 23:40:16
【问题描述】:

我正在按照代码发送邮件而无需身份验证。Java 代码描述如下。

final String frommail = "a@g.com"
 String toEmail = "b@gmail.com";

    Properties props = new Properties();
    props.put("mail.smtp.auth", PropertiesLoader.getPropertiesValue(MAIL_SMTP_AUTH));
    props.put("mail.smtp.host", PropertiesLoader.getPropertiesValue(MAIL_SMTP_HOST));
    props.put("mail.smtp.port", PropertiesLoader.getPropertiesValue(MAIL_SMTP_PORT));
    //enable authentication
    props.put(MAIL_SMTP_ENABLE, PropertiesLoader.getPropertiesValue(MAIL_SMTP_ENABLE));

    Session session = Session.getInstance(props);
    try {
        MimeMessage msg = new MimeMessage(session);
        //set message headers
        msg.addHeader("Content-type", "text/HTML; charset=UTF-8");
        msg.addHeader("format", "flowed");
        msg.addHeader("Content-Transfer-Encoding", "8bit");
        msg.setFrom(new InternetAddress(frommail, EMAIL_FROM_NAME));
        // msg.setReplyTo(InternetAddress.parse(frommail, false));
        msg.setSubject(subject, "UTF-8");
        msg.setContent(body, MAIL_CONTENT_TYPE);
        msg.setSentDate(new Date());
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("pramilkprince@rediffmail.com", false));
        Transport.send(msg);
        logger.info("EMail Sent Successfully!!"); 

但是在发送邮件时,它会抛出以下异常

com.sun.mail.smtp.SMTPAddressFailedException: 554 5.7.1 : 中继访问被拒绝 com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1862) 在 com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1118) 在 javax.mail.Transport.send0(Transport.java:254) 在 javax.mail.Transport.send(Transport.java:124) 在 com.gtl.gcc.util.SendEmail.sendEmailFromInfo(SendEmail.java:195) 在 com.gtl.gcc.util.SendEmail.createMailBodyAndSendMailForUpdateKYC(SendEmail.java:144)

如果有人对此有任何想法,请帮助

【问题讨论】:

  • 抱歉,不清楚您要问什么。您想知道“中继访问被拒绝”是什么意思吗?或者您想在没有身份验证的情况下发送邮件? (在你的情况下显然行不通)
  • 是的,我想在 java 中发送未经身份验证的邮件。为此,我必须对上述代码进行哪些更改?我还想找出异常的根本原因
  • 好吧,对于初学者来说,你必须找到另一个不进行身份验证的 smtp 服务器。你在写某种垃圾邮件软件吗? :)

标签: jakarta-mail


【解决方案1】:

如果您想在没有身份验证的情况下发送邮件,您需要运行自己的 SMTP 服务器。如果它在公共互联网上,那么在您自己使用之前,它就会被垃圾邮件淹没。如果它在您的私人 Intranet 上,您可以使其工作。例如,Gmail 绝对不会让您在不进行身份验证的情况下发送邮件。请注意,这与使用 JavaMail API 完全无关。

【讨论】:

    【解决方案2】:

    正如@BillShannon 指出的那样,由于垃圾邮件问题,通过大多数 SMTP 服务器发送都需要身份验证。

    但是,任何域的 MX 网关 都需要在 TCP 25 上打开,并且对于未经身份验证的电子邮件。

    在处理Java send email avoiding smtp relay server and send directly to MX server 时,我创建了一个小示例来使用目标域的 MX 服务器直接解决该问题。

    如前所述:如果您的发送服务器没有将 DNS 反向解析到您发送 来自的域,那么您很可能最终会被阻止或直接归类为垃圾邮件。

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2019-10-21
      • 2019-09-25
      • 2016-11-17
      相关资源
      最近更新 更多