【问题标题】:Sending an email from java从java发送电子邮件
【发布时间】:2016-03-16 22:57:22
【问题描述】:

我正在使用下面链接中的JavaMail – GMail 通过TLS 方法从java 应用程序发送邮件。

当我尝试这样做时,我得到了以下异常,所以有人可以告诉我我需要做什么才能成功连接以发送电子邮件。

javamail-api-sending-email-via-gmail-smtp-example link

Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 905, response: -1
    at com.pr.SendMailTLS.main(SendMailTLS.java:48)
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 905, response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1215)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:322)
    at javax.mail.Service.connect(Service.java:258)
    at javax.mail.Service.connect(Service.java:137)
    at javax.mail.Service.connect(Service.java:86)
    at javax.mail.Transport.send0(Transport.java:150)
    at javax.mail.Transport.send(Transport.java:80)
    at com.pr.SendMailTLS.main(SendMailTLS.java:43)

【问题讨论】:

标签: java


【解决方案1】:

您需要记下这一点:

Outgoing Mail (SMTP) Server
requires TLS or SSL: smtp.gmail.com (use authentication)
Use Authentication: Yes
Port for TLS/STARTTLS: 587
Port for SSL: 465 

由于您使用 TLS,请使用端口 - 587。

在您的 java 代码中:

    final String username = "yoruusername@gmail.com";
    final String password = "yorupasswors";

    //set the following configs as follows

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");

也可以去这个gmail设置link.

  • 在“密码”下,禁用两步验证。
  • 在“帐户权限”下,启用“访问安全性较低的应用程序”

【讨论】:

    【解决方案2】:

    Mailer.java

    enter code here
     import java.util.Properties;
        import javax.mail.Message;
        import javax.mail.MessagingException;
        import javax.mail.PasswordAuthentication;
        import javax.mail.Session;
        import javax.mail.Transport;
        import javax.mail.internet.InternetAddress;
        import javax.mail.internet.MimeMessage;
    
    
        public class Mailer {
        public static void send(String to,String sub,String msg)
        {
            String host="smtp.gmail.com";
            final String user="abc@gmail.com";
            final String pass="123456";
    
            Properties props=new Properties();
            props.put("mail.smtp.host", host);
            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.port","465");
    
            Session session = Session.getDefaultInstance(props,  
                     new javax.mail.Authenticator() {  
                      protected PasswordAuthentication getPasswordAuthentication() {  
                       return new PasswordAuthentication(user,pass);  
                       }  
                    });  
    
            try {
                MimeMessage message = new MimeMessage(session);  
                 message.setFrom(new InternetAddress(user));  
                 message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));  
                 message.setSubject(sub);  
                 message.setText(msg);  
    
    
                Transport.send(message);
                System.out.println("done");
    
            } catch (MessagingException e) 
            {
                e.printStackTrace();
            }
        }
        }
    

    【讨论】:

      【解决方案3】:

      SendMail.java

      import java.io.IOException;
      import java.io.PrintWriter;
      
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      
      public class SendMail extends HttpServlet 
      {
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp)
              throws ServletException, IOException 
      
              {
          resp.setContentType("text/html");
          PrintWriter out=resp.getWriter();
      
      
          String to=req.getParameter("to");
          String subject=req.getParameter("sub");
          String message=req.getParameter("msg");
      
          Mailer.send(to,subject,message);
      
          out.print("message has been send successfully");
      
          out.close();
              }
      }
      

      【讨论】:

      • 请解释你的代码是做什么的以及OP编写的代码有什么问题。还要考虑更新相同的答案,而不是发布另一个答案
      • 这里有mail.jar和activation.jar
      • 这里我们有 mail.jar 和 activation.jar 属性类用于放置 smtp 协议的所有属性。并设置套接字工厂端口 465。创建 Session 对象进行密码验证。使用 MIME 对象通过传输层发送消息。
      猜你喜欢
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      相关资源
      最近更新 更多