0

我正在创建一个应用程序,我想在其中向我的客户发送电子邮件。当我编译下面的代码时它可以,但是当我运行它时它给了我如下错误

java code:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail
{
   public static void main(String [] args)
   {   

     String to = "prakash_d22@rediffmail.com";    
      String from = "web@gmail.com";    
      String host = "localhost";    
      Properties properties = System.getProperties();    
      properties.setProperty("smtp.gmail.com", host);   
          Session session = Session.getDefaultInstance(properties); 
      try{         
         MimeMessage message = new MimeMessage(session);     
         message.setFrom(new InternetAddress(from));        
         message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));      
         message.setSubject("This is the Subject Line!");        
         message.setText("This is actual message");       
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

错误: 在此处输入图像描述

请指导我。

4

2 回答 2

2
            String host = "smtp.gmail.com";

            Properties properties = new Properties();

设置以下属性

        properties .put("mail.smtp.starttls.enable", "true");
        properties .put("mail.smtp.host", host);
        properties .put("mail.smtp.user", username);
        properties .put("mail.smtp.password", password);
        properties .put("mail.smtp.port", "587");
        properties .put("mail.smtp.auth", "true");
于 2012-08-17T04:54:46.350 回答
0

您是否阅读过JavaMail API 的基础知识

无论如何,据我所知,问题是您使用的配置无效。

properties.setProperty("smtp.gmail.com", host);

正如您在 JavaMail API 文档中所见,JavaMail 不支持名为smtp.gmail.com. 你可能想要的实际上是......

properties.setProperty("mail.smtps.host", host);

我怀疑您希望使用Gmail 的 SMTPS 服务器,而不是localhost您现在拥有的托管服务器,因此我建议您更改代码,以便...

final String host = "smtp.gmail.com";

您还希望使用身份验证,这JavaMail表明您可以在 Gmail 上的常见问题解答中执行以下操作:

properties.setProperty("mail.smtps.auth", "true");

请注意,Gmail 需要进行身份验证才能发送邮件。似乎另一个答案建议您可以使用会话属性配置用户名/密码;不幸的是,这是不正确的。

你想要做的是使用一个Authenticator.

final Session session = Session.getInstance(properties, new Authenticator() {

  static final PasswordAuthentication AUTH = new PasswordAuthentication(USER, PASS);

  protected PasswordAuthentication getPasswordAuthentication() {
    return AUTH;
  }
});
于 2012-08-17T05:04:11.313 回答