使用Java Mail Api进行无需身份验证的邮件发送

时间:2015-12-16 04:40:24

标签: javamail

我按照代码发送邮件而不进行身份验证.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)at   com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1118)     在javax.mail.Transport.send0(Transport.java:254)at   javax.mail.Transport.send(Transport.java:124)at   com.gtl.gcc.util.SendEmail.sendEmailFromInfo(SendEmail.java:195)at at   com.gtl.gcc.util.SendEmail.createMailBodyAndSendMailForUpdateKYC(SendEmail.java:144)

如果有任何人对此有所了解请帮助

2 个答案:

答案 0 :(得分:0)

如果要在不进行身份验证的情况下发送邮件,则需要运行自己的SMTP服务器。如果它在公共互联网上,它将充满垃圾邮件,然后你可以自己使用它。如果它在您的私人内部网上,您可以使它工作。例如,Gmail肯定会让您在未经过身份验证的情况下发送邮件。请注意,这与使用JavaMail API完全没有任何关系。

答案 1 :(得分:0)

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

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

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

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

祝你好运