首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jmail java从自定义实时domian outlook com发送电子邮件

使用jmail java从自定义实时domian outlook com发送电子邮件
EN

Stack Overflow用户
提问于 2014-02-14 05:06:22
回答 1查看 1.1K关注 0票数 0

我正在尝试通过我的自定义域名发送一封电子邮件,该域名是我使用活动域名https://domains.live.com设置的。电子邮件本身是有效的,我可以用我的自定义域用户名和密码登录outlook.com,并发送和接收邮件。我想要做的是通过Java和JMail发送电子邮件,下面是我的代码(来自这里:http://www.oracle.com/technetwork/java/javamail/faq-135477.html#outlook):

代码语言:javascript
复制
public static void sendEmail() throws MessagingException{
    System.out.println("Sending email!");

    String host = "smtp.live.com"; // using this or smtp-mail.outlook.com has the same outcome.
    String username = "username";
    String password = "password";

    Properties props = new Properties();
    props.put("mail.smtp.starttls.enable", "true");

    Session session = Session.getInstance(props);
    MimeMessage msg = new MimeMessage(session);
    msg.setSubject("Test Subject");
    msg.setFrom(new InternetAddress("fromemail"));
    msg.addRecipient(Message.RecipientType.TO, new InternetAddress("toemail")); 

    Transport t = session.getTransport("smtp");

    try {
        t.connect(host, username, password);
        t.sendMessage(msg, msg.getAllRecipients());
    } finally {
        t.close();
    }
}

我代入我的用户名和密码,得到以下消息:

代码语言:javascript
复制
Sending email!
javax.mail.MessagingException: Exception reading response;


nested exception is:
    java.net.SocketException: Connection reset
    at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2210)
    at com.sun.mail.smtp.SMTPTransport.close(SMTPTransport.java:1222)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.security.ssl.InputRecord.readFully(Unknown Source)
    at sun.security.ssl.InputRecord.read(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
    at sun.security.ssl.AppInputStream.read(Unknown Source)
    at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:110)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:89)
    at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2188)
    ... 36 more

注意:发件人电子邮件与我的用户名相同!

我遗漏了什么?谢谢!

编辑:我已经将我的道具修改为:

代码语言:javascript
复制
Properties props = new Properties();
props.put("mail.smtp.auth", "true");  // If you need to authenticate
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.starttls.enable", "true");

仍然显示相同的错误..

编辑:我修复了它。我打开了debug using session.setDebug(true),可以看到我没有电子邮件正文。所以我添加了msg.setText("Content"),这一切都起作用了!

EN

回答 1

Stack Overflow用户

发布于 2014-02-14 05:14:37

smtp.live.com不侦听端口25,该端口是默认端口。看起来他们需要TLS,所以你也得用javamail来做。默认的TLS端口是587,我已经确认您尝试连接的服务器正在侦听该端口。本文将向您介绍如何设置端口:

Using JavaMail with TLS

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21765486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档