Smtp 必须首先发出STARTTLS命令

Smtp 必须首先发出STARTTLS命令,smtp,gmail,jakarta-mail,Smtp,Gmail,Jakarta Mail,我正在使用JavaMail和smtp(gmail),以下是我的代码: import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mai

我正在使用JavaMail和smtp(gmail),以下是我的代码:

import java.util.Properties;    
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Email {    
    Properties emailProperties;
    Session mailSession;
    MimeMessage emailMessage;

    public static void main(String args[]) throws AddressException,
            MessagingException {

        Email javaEmail = new Email();

        javaEmail.setMailServerProperties();
        javaEmail.createEmailMessage();
        javaEmail.sendEmail();
    }

    public void setMailServerProperties() {

        String emailPort = "587";//gmail's smtp port

        emailProperties = System.getProperties();
        emailProperties.put("mail.smtp.port", emailPort);
        emailProperties.put("mail.smtp.auth", "true");
        emailProperties.put("mail.smtp.starttls.enable", "true");

    }

    public void createEmailMessage() throws AddressException,
            MessagingException {
        String[] toEmails = { "to@gmail.com" };
        String emailSubject = "Java Email";
        String emailBody = "This is an email sent by JavaMail api.";

        mailSession = Session.getDefaultInstance(emailProperties, null);
        emailMessage = new MimeMessage(mailSession);

        for (int i = 0; i < toEmails.length; i++) {
            emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
        }

        emailMessage.setSubject(emailSubject);
        emailMessage.setContent(emailBody, "text/html");//for a html email
        //emailMessage.setText(emailBody);// for a text email

    }

    public void sendEmail() throws AddressException, MessagingException {

        String emailHost = "smtp.gmail.com";
        String fromUser = "yourusername";//just the id alone without @gmail.com
        String fromUserEmailPassword = "your_password";

        Transport transport = mailSession.getTransport("smtp");

        transport.connect(emailHost, fromUser, fromUserEmailPassword);
        transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
        transport.close();
        System.out.println("Email sent successfully.");
    }

}

你能试着换一下这行吗

Transport t = session.getTransport("smtps");
您必须提供所需的适当用户名和密码 你的邮件服务器。请注意,您可以将协议更改为“smtps”以 通过SSL建立安全连接


此处的完整信息:

能否尝试更改此行:

Transport t = session.getTransport("smtps");
您必须提供所需的适当用户名和密码 你的邮件服务器。请注意,您可以将协议更改为“smtps”以 通过SSL建立安全连接


此处的完整信息:

在我的例子中,上述问题发生在我使用ibm was-*.jar时。当我将jar切换到Javax.mail-version.jar(版本是一个类似于1.5.5的数字)时,它得到了解决。

在我的例子中,上述问题发生在我使用ibm was-*.jar时。当我将jar切换到Javax.mail-version.jar(版本是一个类似于1.5.5的数字)时,它得到了解决。

是的,我提供了一个有效的用户名和密码。更改该行后,我收到以下错误:线程“main”javax.mail.NoSuchProviderException中的异常:javax.mail.Session.getProvider(Session.java:436)处javax.mail.Session.getTransport(Session.java:631)处javax.mail.Session.getTransport(Session.java:612)处没有smtps的提供程序在com.mail.Email.sendmail(Email.java:65)和com.mail.Email.main(Email.java:26)上,听起来像这样的问题:支持jar:mail.jar和activation.jar在我的类路径中。是的,我提供了一个有效的用户名和密码。更改该行后,我收到以下错误:线程“main”javax.mail.NoSuchProviderException中的异常:javax.mail.Session.getProvider(Session.java:436)处javax.mail.Session.getTransport(Session.java:631)处javax.mail.Session.getTransport(Session.java:612)处没有smtps的提供程序在com.mail.Email.sendmail(Email.java:65)和com.mail.Email.main(Email.java:26)上,听起来像是这样的问题:支持jar:mail.jar和activation.jar在我的类路径中。