Java Mail无法远程工作

时间:2014-04-21 22:07:05

标签: java javamail

我已经制作了一个Java Mail Servlet来显然发送电子邮件。它在生产服务器上工作得非常好但是当我尝试在我自己的家庭服务器上运行时,我收到以下错误消息

javax.mail.SendFailedException:无效的地址;

javax.servlet.ServletException:javax.mail.SendFailedException:无效的地址;   嵌套异常是:     com.sun.mail.smtp.SMTPAddressFailedException:554 5.7.1< * @ googlemail.com>:已拒绝中继访问

evo.net.Mail.service(Mail.java:60)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52

我将hostname变量从localhost更改为servlet中的服务器IP,但它并没有什么区别。

我的代码:

package evo.net;
import java.util.*;

import javax.mail.*;
import javax.mail.Session;
import javax.mail.internet.*;
import javax.activation.*;

import java.io.IOException;
import java.io.PrintWriter;

 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;

 @WebServlet("/Mail")
 public class Mail extends HttpServlet {
private static final long serialVersionUID = 1L;

 public Mail() {
    super();
 }

protected void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {

    PrintWriter out = response.getWriter();

    String to = "********";
    String from = "*******@codeprojects.co.uk";
    String host = "codeprojects.co.uk";

    Properties props = System.getProperties();

    props.put("mail.smtp.host", host);
    props.put("mail.smtp.auth", "true");

    Session session = Session.getDefaultInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("root", "*****");
            }
      });

    try {
        Transport trans = session.getTransport("smtp");
        trans.connect("root", "******");

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO, new             InternetAddress(to));

        message.setSubject("The subject");
        message.setText("Hello World");

        trans.sendMessage(message, message.getAllRecipients());;
        out.println("Test");

    } catch(MessagingException mex) {
        throw new ServletException(mex);
    }
}
  }

2 个答案:

答案 0 :(得分:1)

Google验证您要发送的域名(或说您发送的域名)。

如果您使用的是开发帐户,则会产生与生产帐户不同的行为。对于那里的每个主要邮件提供商(包括亚马逊SES)都采用这种方式

您的答案在于Domain Keys

答案 1 :(得分:0)

该行

SMTPAddressFailedException: 554 5.7.1 <*@googlemail.com>: Relay access denied

说了一切。

出于某种原因,您的家庭ISP或Gmail都不允许您转发电子邮件的请求。

您的家庭ISP可能会要求您连接到他们自己的SMTP服务器(这是一种常见的反垃圾邮件考虑因素)。

Gmail可能会将您的家庭IP置于黑名单中(可能是因为您的ISP未小心阻止垃圾邮件发送)。

<强>更新

String host = "codeprojects.co.uk";
props.put("mail.smtp.host", host);

表示您正在使用外部SMTP服务器。许多家庭ISP不允许这样做,并且会出现类似您描述的错误。要在家中运行此功能,请尝试将SMTP服务器更改为ISP的服务器。