使用SMTP发送电子邮件

时间:2011-07-19 15:58:31

标签: java smtp

我正在编写一个简单的Java程序来发送邮件,但是我遇到了错误。这是代码:

package mypackage;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

// Send a simple, single part, text/plain e-mail
public class Sendmail {

    public static void main(String[] args) {

        // SUBSTITUTE YOUR EMAIL ADDRESSES HERE!!!
        String to = "atul.krbhatia@gmail.com";
        String from = "atul.krbhatia@gmail.com";
        // SUBSTITUTE YOUR ISP'S MAIL SERVER HERE!!!
        String host = "smtp.gmail.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);
        // 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);
            System.out.println("in try blk");
            //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
            System.out.println("in catch block");
            mex.printStackTrace();
        }
    }
}//End of class

这是错误:

221 2.0.0 closing connection d1sm3094152pbj.24
in catch block
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. d1sm3094152pbj.24
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 javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at mypackage.Sendmail.main(Sendmail.java:48)

4 个答案:

答案 0 :(得分:2)

Gmail仅支持SMTP over SSL / TLS。

添加

props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");

您还需要登录服务器:

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

Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("username", "password");
    }
});

答案 1 :(得分:1)

答案 2 :(得分:1)

“javamail gmail”的简单google search将提供许多如何将JavaMail与GMail一起使用的示例,例如this one。 Google还有configuration page列出了您需要的连接配置,因此您可以仔细检查设置。

答案 3 :(得分:0)

看起来服务器期待SSL。此处还有其他几个问题,人们也在尝试使用Java通过Gmail发送邮件,我建议您查看它们。

How can I send an email by Java application using GMail, Yahoo, or Hotmail?

Must issue a STARTTLS command first. Sending email with Java and Google Apps