12

我的代码:

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMailTLS {
public static void main(String[] args) {
    final String username = "myemailid@gmail.com";
    final String password = "myemailpassword";
    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");
    Session session = Session.getInstance(props,
      new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
      });

    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("myemailid@gmail.com"));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse("myfriedemail@ymail.com"));
        message.setSubject("Testing Subject");
        message.setText("Dear Mail Crawler,"+
 "\n\n No spam to my email,please!"); 
        Transport.send(message);
        System.out.println("Done");
    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
}
}

我的错误:

线程“主”java.lang.RuntimeException 中的异常:javax.mail.MessagingException:
未知 SMTP 主机:smtp.gmail.com;
嵌套异常是:
java.net.UnknownHostException: smtp.gmail.com
at Mail.SendMailTLS.main(SendMailTLS.java:56)
原因:javax.mail.MessagingException: Unknown SMTP host: smtp.gmail.com;
嵌套异常是:
java.net.UnknownHostException: smtp.gmail.com
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1970)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java :642)
在 javax.mail.Service.connect(Service.java:317)
在 javax.mail.Service.connect(Service.java:176)
在 javax.mail.Service.connect(Service.java:125)
在 javax.mail.Transport.send0(Transport.java:194)
在 javax.mail.Transport.send(Transport.java:124)
在 Mail.SendMailTLS。 main(SendMailTLS.java:51)
引起:java.net.UnknownHostException: smtp.gmail.com
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java: 366)
在 java.net.Socket.connect(Socket.java:525)
在 java.net.Socket.connect(Socket.java:475)
在 com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319 )
在 com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
在 com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
... 还有 7 个
Java 结果:1

我的本地代理为 172.17.0.4:8080 ,用户名为:user1,密码为:user2
Solutions pls??

4

6 回答 6

14

试试这个服务器:

smtp.googlemail.com

于 2012-04-10T09:51:51.497 回答
12

如果您在代理下,我认为您不能使用 Java Mail。

来自:oracle.com

问:如何配置 JavaMail 以通过我的代理服务器工作?

答:JavaMail 目前不支持通过 Web 代理服务器访问邮件服务器。使用代理服务器的主要原因之一是允许来自公司网络内的 HTTP 请求通过公司防火墙。防火墙通常会阻止大多数对 Internet 的访问,但会允许来自代理服务器的请求通过。此外,公司网络内的邮件服务器将为电子邮件执行类似的功能,通过 SMTP 接受消息并将其转发到 Internet 上的最终目的地,并接受传入的消息并将其发送到适当的内部邮件服务器。


更新

问:如何配置 JavaMail 以通过我的代理服务器工作?[更新!]

A: 从 JavaMail 1.6.0 开始,JavaMail 支持通过 Web 代理服务器访问邮件服务器。设置代理服务器的“mail.protocol.proxy.host”和“mail.protocol.proxy.port”属性。通过设置“mail.protocol.proxy.user”和“mail.protocol.proxy.password”属性支持代理服务器 BASIC 身份验证。

此外,如果您的代理服务器支持 SOCKS V4 或 V5 协议(http://www.socks.nec.com/aboutsocks.html,RFC1928)并允许匿名连接,并且您使用的是 JDK 1.5 或更新版本以及 JavaMail 1.4 .5 或更高版本,您可以按照 com.sun.mail.smtp 包的 javadocs 中所述设置“mail.smtp.socks.host”属性,在每个会话、每个协议的基础上配置 SOCKS 代理。“imap”和“pop3”协议存在类似的属性。JDK 支持 SOCKS 服务器的身份验证,方法是设置“java.net.socks.username”和“java.net.socks.password”系统属性(因此适用于所有 SOCKS 连接),如 JDK 网络属性文档中所述.

如果您使用旧版本的 JDK 或 JavaMail,您可以告诉 Java 运行时将所有 TCP 套接字连接定向到 SOCKS 服务器。有关 socksProxyHost 和 socksProxyPort 属性的最新文档,请参阅网络属性指南。这些是系统级属性,而不是 JavaMail 会话属性。可以在调用应用程序时从命令行设置它们,例如:java -DsocksProxyHost=myproxy ...。该工具可用于将 SMTP、IMAP 和 POP3 通信从 JavaMail 定向到 SOCKS 代理服务器。请注意,设置这些属性会将所有 TCP 套接字定向到 SOCKS 代理,这可能会对应用程序的其他方面产生负面影响。

在使用旧版本的 JavaMail 并且没有这样的 SOCKS 服务器时,如果您想使用 JavaMail 间接访问防火墙外的邮件服务器,您可以使用诸如通过 HTTP 代理服务器连接到隧道 TCP 连接的程序。配置 JavaMail 以使用连接实例作为 SOCKS 服务器。

于 2012-04-10T10:15:13.577 回答
3

发生这种情况是因为 Gmail 安全性...只需允许通过应用程序访问您的 gmail 帐户进入您的帐户: https ://www.google.com/settings/security/lesssecureapps 它将工作.. smtp.gmail.com是正确的,无需更改。

也不要忘记检查互联网连接。

于 2015-02-11T16:29:44.433 回答
1

你可以试试 props.put("mail.smtp.host", "gmail.com");没有 smtp.gmail.com

于 2012-04-10T09:13:36.533 回答
1

仅出于开发目的,您可以尝试通过代理打开隧道到 smtp.gmail.com

proxytunnel -q -p proxy_host:proxy_port -d smtp.gmail.com:465 -a local_port

并在您的代码中使用

props.put("mail.smtp.host", "localhost");
props.put("mail.smtp.port", "local_port");
于 2012-04-26T15:18:53.400 回答
0

当您将 javamail 升级到 1.6.2 时它工作正常

于 2021-09-29T04:59:51.933 回答