当前位置: 首页 > 知识库问答 >
问题:

如何使用java从Web服务器发送电子邮件。使用Gmail服务器发送邮件

法景明
2023-03-14

我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码

 public static void send(String from,String password,String to,String sub,String msg){  
      //Get properties object    
      Properties props = new Properties();    
      props.put("mail.smtp.host", "smtp.gmail.com");    
      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");    
      //get Session   
      Session session = Session.getDefaultInstance(props,    
       new javax.mail.Authenticator() {    
       protected PasswordAuthentication getPasswordAuthentication() {    
       return new PasswordAuthentication(from,password);  
       }    
      });    
      //compose message    
      try {    
       MimeMessage message = new MimeMessage(session);    
       message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));    
       message.setSubject(sub);    
       message.setText(msg);    
       //send message  
       Transport.send(message);    
       System.out.println("message sent successfully");    
      } catch (MessagingException e) {throw new RuntimeException(e);}    

}  

代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误

javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏览器登录,然后重试。534-5.7.14了解更多信息,请访问534 5.7.14https://support.google.com/mail/answer/78754l13sm3053341iti6-gsmtp

共有2个答案

夏景胜
2023-03-14

请试试这个

public static void sendPDFReportByGMail(String from, String pass, String to, String subject, String body) {
    Properties props = System.getProperties();
    String host = "smtp.gmail.com";
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.user", from);
    props.put("mail.smtp.password", pass);
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.auth", "true");

    Session session = Session.getInstance(props, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(from, pass);
        }
    });

    MimeMessage message = new MimeMessage(session);

    try {
        // Set from address
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
        // Set subject
        message.setSubject(subject);
        // Set Mail body
        message.setText(body);

        BodyPart objMessageBodyPart = new MimeBodyPart();

        objMessageBodyPart.setText(body);

        Transport transport = session.getTransport("smtp");
        transport.connect(host, from, pass);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    } catch (AddressException ae) {
        ae.printStackTrace();
    } catch (MessagingException me) {
        me.printStackTrace();
    }
}
袁玮
2023-03-14

我最近遇到的同样问题,我发现问题是EC2区域。Google不允许从用户的非频繁位置登录较少的安全应用程序。您可以使用Google Mail API或使用其他一些邮件平台,例如Yahoo。检查您的EC2实例区域。尝试使用yahoo mail执行代码,在Elastic beanstek或您使用的任何环境上部署它。这对我有用。

public void yahooSend(String mail,String subject,String msg) {

        // Sender's email ID needs to be mentioned
         String from = "YOUR_YAHOO_MAIL";
         String pass ="YOUR_YAHOO_PASSWORD";
        // Recipient's email ID needs to be mentioned.
       String to = mail;
       String host = "smtp.mail.yahoo.com";

       // Get system properties
       Properties properties = System.getProperties();
       // Setup mail server
       properties.put("mail.smtp.starttls.enable", "true");
       properties.put("mail.smtp.host", host);
       properties.put("mail.smtp.user", from);
       properties.put("mail.smtp.password", pass);
      // props.put("mail.smtp.user", "YAHOO_USER_NAME"); 
       properties.put("mail.smtp.port", "587");
       properties.put("mail.smtp.auth", "true");


       // Get the default Session object.
       Session session = Session.getDefaultInstance(properties);

       try{
          // Create a default MimeMessage object.
          MimeMessage message = new MimeMessage(session);

          // Set From: header field of the header.
          message.setFrom(new InternetAddress(from));

          // Set To: header field of the header.
          message.addRecipient(Message.RecipientType.TO,
                                   new InternetAddress(to));

          // Set Subject: header field
          message.setSubject(subject);

          // Now set the actual message
          message.setText(msg);
          System.out.print("Sending msg "+msg);
          // Send message
          Transport transport = session.getTransport("smtp");
          transport.connect(host,587, from, pass);
          transport.sendMessage(message, message.getAllRecipients());
          transport.close();
         System. out.println("Sent message successfully....");
       }catch (MessagingException mex) {
           System. out.print(mex);
          mex.printStackTrace();
       }
 }
 类似资料:
  • 问题内容: 我正在尝试从PHP页面通过GMail的SMTP服务器发送电子邮件,但出现此错误: 身份验证失败[SMTP:SMTP服务器不支持身份验证(代码:250,响应:mx.google.com,为您提供服务,[98.117.99.235]大小为35651584 8位MIME STARTTLS增强的状态代码,编码方式)]] 有人可以帮忙吗?这是我的代码: 问题答案: // Pear Mail Li

  • 我目前正在为某人做一个网站,我想在联系我们页面上添加一个表单,使用他们没有Php的网络托管服务器向他们的电子邮件地址发送消息。有人能帮我吗?我无法理解这个过程,以及如何使它安全并真正发挥作用。我必须在服务器上部署一些东西吗?或者我可以使用他们在那里的smpt服务器吗?如果是这样,我如何确保smtp服务器身份验证在客户端的devols上不可见。谢谢你!

  • 问题内容: 我在寻找有关如何 从localhost WAMP发送电子邮件的 适当信息。以及如何获得从特定的授权电子邮件地址发送电子邮件的授权以发送任何其他电子邮件地址。 如何配置这整个步骤向我解释了细节,我已经在这里访问了一些Stack Overflow的答案以及博客文章,但是所有内容都很混乱且过时,因此可能无法正常工作。所以我需要Stack Overflow用户帮助。谢谢。 问题答案: 从配置工

  • 我创建了下一个类: 我在我的服务中声明它是一项服务。yml 在我的控制器中,调用服务: 电子邮件已发送,但页面仍在加载30秒,我有一个来自开发人员工具栏的警报:加载Web调试工具栏时发生错误(404:未找到)。您想打开分析器吗?如果接受消息,Symfony分析器不显示任何错误。如果取消,消息开发人员工具栏不会出现。 我做错了什么? 非常感谢。

  • 我必须在nodeJS和angular 6中实现类似webmail的电子邮件服务器。 关于我的场景,用户需要提供他们的电子邮件和电子邮件密码,然后我必须识别他们的smtp服务器地址和身份验证。之后,用户应该能够发送和接收电子邮件连接到提供的电子邮件。 我已经研究了我有哪些选项,大多数文章说node-mailer是最好的发送电子邮件的,但没有接收电子邮件和node-imap的功能,除了那些我目前最好的