首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JavaMail发送到gmail时的TLS问题

通过JavaMail发送到gmail时的TLS问题
EN

Stack Overflow用户
提问于 2011-06-29 04:02:58
回答 3查看 26.6K关注 0票数 9

事实证明,JavaMail比我想象的要更令人沮丧。我已经在网上看了几个关于如何通过Gmail的服务器(而不是通过SSL)发送简单的SMTP电子邮件的示例。在尝试了几个不同的代码示例之后,当我调用transport.connect()时,我总是总结出相同的示例异常。我一直得到这个堆栈跟踪:

代码语言:javascript
复制
Exception in thread "main" com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. l10sm302158wfk.21
     at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
     at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)
     at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1097)
     at SendEmail.main(SendEmail.java:47)

有人能告诉我我应该添加什么或做些什么来修复这个问题吗?

下面是我的代码:

代码语言:javascript
复制
    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.host", "smtp.gmail.com");
    props.put("mail.user", "blahblah@gmail.com");
    props.put("mail.password", "blah");
    props.put("mail.port", "587");

    Session mailSession = Session.getDefaultInstance(props, null);
    Transport transport = mailSession.getTransport();

    MimeMessage message = new MimeMessage(mailSession);
    message.setSubject("This is a test");
    message.setContent("This is a test", "text/plain");
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("blahblah2@gmail.com"));

    transport.connect();
    transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
    transport.close();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-29 04:04:52

您需要启用STARTTLS。向您的配置中再添加一个属性:

代码语言:javascript
复制
props.put("mail.smtp.starttls.enable", "true");
票数 14
EN

Stack Overflow用户

发布于 2012-02-03 18:43:41

代码语言:javascript
复制
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class CopyOfSendMail {

private static String SMPT_HOSTNAME = "my smtp port no";
private static String USERNAME = "root";
private static String PASSWORD = "root";

public static void main(String[] args) {
    Properties props = new Properties();
    props.put("mail.smtp.host", SMPT_HOSTNAME);
    props.put("mail.from","aaa@gmail.com");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "true");

    Session session = Session.getInstance(props, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(USERNAME, PASSWORD);
        }
    });
    try {
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom();
        msg.setRecipients(Message.RecipientType.TO,
                          "bbb@gmail.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);
     }
    }
}
票数 5
EN

Stack Overflow用户

发布于 2013-07-09 21:44:07

此处是使用MSN-SMTP服务的邮件发件人

我的主机是smtp.live.com,端口是587。

正如official doc of Java Mail中所给出的,您可以在这里获得有关发送和接收邮件的最佳Java Mail机制的更多信息。

邮件客户端的属性包括:

代码语言:javascript
复制
  Properties mailProps = new Properties();
  mailProps.put("mail.smtp.user",mailID);
  mailProps.put("mail.smtp.host",host);
  mailProps.put("mail.smtp.auth", "true");
  mailProps.put("mail.smtp.port",port);
  mailProps.put("mail.smtp.starttls.enable", "true");
  Session mailSession = Session.getInstance(mailProps,null);

发送机制为:

代码语言:javascript
复制
 SMTPTransport t=(SMTPTransport)mailSession.getTransport("smtp");
 System.out.println(" Taking protocol! ");
 t.connect(host, mailID, password);
 System.out.println(" Connection Successfull! ");
 t.sendMessage(mimMessage,mimMessage.getAllRecipients());

注意:

代码在本地的印度服务器上运行良好。,但在Azur刚果上没有响应:两者都是Linux服务器。

错误是:

代码语言:javascript
复制
 com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first

即使手动设置系统属性:

代码语言:javascript
复制
 java -Dmail.smtp.starttls.enable=true SendAMai

同样,@Rob Harrop和@Brian的得分也得到了保证

代码语言:javascript
复制
if you're on Linux ensure that you have libnss3 and openssl installed
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6512430

复制
相关文章

相似问题

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