JavaMail问题:无法将命令发送到SMTP主机

我正在尝试执行Java邮件,并且收到错误消息“无法将命令发送到SMTP主机”。任何帮助,将不胜感激。以及任何将来可能出现的问题的解决方案。确切的例外是

javax.mail.MessagingException: Can't send command to SMTP host;

nested exception is:

java.net.SocketException: Connection closed by remote host

at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2106)

at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2093)

at com.sun.mail.smtp.SMTPTransport.close(SMTPTransport.java:1184)

at javax.mail.Transport.send0(Transport.java:197)

at javax.mail.Transport.send(Transport.java:124)

at TestEmail.main(TestEmail.java:45)

at __SHELL17.run(__SHELL17.java:6)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at bluej.runtime.ExecServer$3.run(ExecServer.java:774)

Caused by: java.net.SocketException: Connection closed by remote host

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1186)

at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:43)

at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:114)

at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)

at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)

at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2104)

... 11 more

我的代码如下

import java.util.*;

import javax.mail.*;

import javax.mail.internet.*;

import javax.activation.*;

// Send a simple, single part, text/plain e-mail

public class TestEmail {

public static void main(String[] args) {

// SUBSTITUTE YOUR EMAIL ADDRESSES HERE!!!

String to = "my gmail account whose name i removed for publicity";

String from = "my hotmail account whose name i removed for publicity";

// SUBSTITUTE YOUR ISP'S MAIL SERVER HERE!!!

String host = "smtp.live.com";

// Create properties, get Session

Properties props = new Properties();

// If using static Transport.send(),

// need to specify which host to send it to

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

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

// To see what is going on behind the scene

props.put("mail.debug", "true");

Session session = Session.getInstance(props);

try {

// Instantiatee a message

Message msg = new MimeMessage(session);

//Set message attributes

msg.setFrom(new InternetAddress(from));

InternetAddress[] address = {new InternetAddress(to)};

msg.setRecipients(Message.RecipientType.TO, address);

msg.setSubject("Test E-Mail through Java");

msg.setSentDate(new Date());

// Set message content

msg.setText("This is a test of sending a " +

"plain text e-mail through Java.\n" +

"Here is line 2.");

//Send the message

Transport.send(msg);

}

catch (MessagingException mex) {

// Prints all nested (chained) exceptions as well

mex.printStackTrace();

}

}

}

回答:

服务器需要STARTTLS。如果我使用telnet进行手动SMTP会话,则会得到以下信息:

220 BLU0-SMTP122.phx.gbl Microsoft ESMTP MAIL Service, Version: 6.0.3790.4675 ready at  Mon, 18 Jul 2011 17:08:14 -0700

HELO jhmg.net

250 BLU0-SMTP122.phx.gbl Hello [70.123.155.64]

MAIL FROM:<zzz@zzz.com>

530 5.7.0 Must issue a STARTTLS command first

该服务器不接受未加密的连接

以上是 JavaMail问题:无法将命令发送到SMTP主机 的全部内容, 来源链接: utcz.com/qa/433512.html

回到顶部