JavaMail:无法连接到SMTP服务器
以下代码会导致错误。请帮助我了解什么是错的。JavaMail:无法连接到SMTP服务器
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class SendMail
{
public static void main(String [] args)throws MessagingException
{
SendMail sm=new SendMail();
sm.postMail(new String[]{"[email protected]"},"hi","hello","[email protected]");
}
public void postMail(String recipients[ ], String subject, String message , String from) throws MessagingException
{
boolean debug = false;
//Set the host smtp address
Properties props = new Properties();
props.put("mail.smtp.host", "webmail.emailmyname.com");
// create some properties and get the default Session
Session session = Session.getDefaultInstance(props, null);
session.setDebug(debug);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++)
{
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
// Optional : You can also set your custom headers in the Email if you Want
msg.addHeader("MyHeaderName", "myHeaderValue");
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}
}
Exception:
<pre>
com.sun.mail.smtp.SMTPSendFailedException: 450 smtpout04.dca.untd.com Authentication required
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1368)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:886)
at javax.mail.Transport.send0(Transport.java:191)
at javax.mail.Transport.send(Transport.java:120)
at SendMail.postMail(SendMail.java:52)
at SendMail.main(SendMail.java:10)
需要注意的是很多,许多ISP阻止他们的网络之外的服务器访问外部端口25。 ISP会迫使你使用他们的SMTP服务器。
如果您获得“需要验证”,您必须先输入您的用户名和密码,并至少发出一个请求,例如检查新邮件。尽管SMTP不需要发送电子邮件的用户名和密码,但许多SMTP服务器仍然通过让您登录并通过POP或IMAP检查邮件来实现此目的,然后才能发送邮件。
我可以有代码吗? – user327136 2010-04-27 19:53:16
我应该在哪里指定用户名和密码? – user327136 2010-04-27 19:54:54
这是通过POP或IMAP完成的。 – 2010-04-27 19:56:30
异常消息中的“需要身份验证”表明目标SMTP服务器要求您登录(可能通过TLS或SSL)。直到几年前,这在SMTP服务器上并不常见(这是一种反垃圾邮件措施),因此很容易忽视。
使用SMTP认证连接到SMTP服务器时,您需要使用用户名和密码设置mail.smtp.auth属性(见下文)或提供SMTP传输。为此,您可以使用下列方法之一:
创建邮件会话时提供一个Authenticator对象,并提供身份验证回调过程中的用户名和密码信息。
注意,mail.smtp.user属性可以设置以提供回调默认的用户名,但密码仍然需要明确地提供。
这种方法可以让你使用静态交通运输发送方法来发送消息。
呼叫传输用户名和密码参数明确连接方法。
该方法要求您显式管理传输对象并使用传输sendMessage方法发送消息。 transport.java演示程序演示了如何管理传输对象。以下是大致相当于静态交通发送方法,但提供所需的用户名和密码:
运输TR = session.getTransport(“SMTP”);
tr.connect(smtphost,username,password);
msg.saveChanges(); //不要忘记这个
tr.sendMessage(味精,msg.getAllRecipients());
tr.close();
如何登录smtp服务器? – user327136 2010-04-27 19:58:09
我搜索了Javadoc并粘贴了一个报价。 – 2010-04-27 22:37:27
您的服务器未使用“SMTP验证”。如果使用“SMTP身份验证”,您将得到530响应,而不是450响应。如果响应为450,则服务器很可能使用“POP before SMTP”。发送邮件之前,您需要通过POP或IMAP进行连接。 – 2010-04-28 14:25:37
@javacode,请不要转贴同样的问题,如果你有什么要补充的,请更新您原来的问题。展示活动将在网站上提出您的问题,并将获得更多观众。 – 2010-04-27 19:39:41
可能重复的http:// *。com/questions/2724053/run-time-error-whats-wrong – 2010-04-27 19:40:31
BAH!没有编辑! – 2010-04-27 19:45:04