我正在使用我的Gmail
帐户运行这个简单示例,但它无效并发出以下错误:
send failed, exception: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. nv2sm4478384pbb.6
这是我的代码
public class Email
{
public static void main(String [] args)
{
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.googlemail.com");
props.put("mail.from", "myemail@gmail.com");
Session session = Session.getInstance(props, null);
try {
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO,
"myemail@hotmail.com");
msg.setSubject("JavaMail hello world example");
msg.setSentDate(new Date());
msg.setText("Hello, world!\n");
Transport.send(msg);
} catch (MessagingException mex) {
System.out.println("send failed, exception: " + mex);
}
}
}
答案 0 :(得分:31)
您可能尝试使用端口25上的Gmail服务器通过未经身份验证的连接向第三方发送邮件。 Gmail不允许您这样做,因为任何人都可以使用Gmail的服务器向任何其他人发送邮件。这被称为开放中继,并且在早期是垃圾邮件的常见推动者。互联网上不再接受开放式继电器。
您需要让SMTP客户端使用经过身份验证的连接来连接到Gmail,可能是port 587。
答案 1 :(得分:15)
smtp port和socketFactory必须更改
String to = "reciveremail@xxxx.xxx";
String subject = "subject"
String msg ="email text...."
final String from ="senderemail@gmail.com"
final String password ="senderPassword"
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.debug", "true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from,password);
}
});
//session.setDebug(true);
Transport transport = session.getTransport();
InternetAddress addressFrom = new InternetAddress(from);
MimeMessage message = new MimeMessage(session);
message.setSender(addressFrom);
message.setSubject(subject);
message.setContent(msg, "text/plain");
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
transport.connect();
Transport.send(message);
transport.close();
}
希望它对你有用..
答案 2 :(得分:8)
props.put("mail.smtp.starttls.enable", "true");
解决了我的问题;)
我的问题是 :
com.sun.mail.smtp.SMTPSendFailedException:530 5.7.0必须先发出STARTTLS命令。 u186sm7971862pfu.82 - gsmtp
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1609)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1117)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at com.example.sendmail.SendEmailExample2.main(SendEmailExample2.java:53)
答案 3 :(得分:1)
我在构建电子邮件通知应用程序时也面临同样的问题。你只需要添加一行。下面的一个节省了我的一天。
props.put("mail.smtp.starttls.enable", "true");
com.sun.mail.smtp.SMTPSendFailedException:530 5.7.0必须先发出STARTTLS命令。 h13-v6sm10627790pgp.13 - gsmtp
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1609)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1117)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at com.smruti.email.EmailProject.EmailSend.main(EmailSend.java:99)
希望这会对你有所帮助。
答案 4 :(得分:0)
试试这段代码:
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.prot", "465");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("PUT THE MAIL SENDER HERE !", "PUT THE PASSWORD OF THE MAIL SENDER HERE !");
}
}
);
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("PUT THE MAIL SENDER HERE !"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("PUT THE MAIL RECEIVER HERE !"));
message.setSubject("MAIL SUBJECT !");
message.setText("MAIL BODY !");
Transport.send(message);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
您必须降低邮件发件人的安全性。如果问题仍然存在,我认为它可能是由防病毒引起的,试着禁用它..
答案 5 :(得分:0)
Google现在具有一项功能,指出它不允许不安全的设备发送电子邮件。当我运行程序时,它在第一篇文章中提出了错误。我必须进入我的帐户并允许不安全的应用程序发送电子邮件,方法是单击我的帐户,进入“安全”选项卡,并允许不安全的应用程序使用我的gmail。
答案 6 :(得分:-1)
String username = "mail@google.com";
String password = "some-password";
String recipient = "myemail@hotmail.com");
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.from", "myemail@gmail.com");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", "587");
props.setProperty("mail.debug", "true");
Session session = Session.getInstance(props, null);
MimeMessage msg = new MimeMessage(session);
msg.setRecipients(Message.RecipientType.TO, recipient);
msg.setSubject("JavaMail hello world example");
msg.setSentDate(new Date());
msg.setText("Hello, world!\n");
Transport transport = session.getTransport("smtp");
transport.connect(username, password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();