简体   繁体   English

无法使用javamail api向gmail帐户发送邮件

[英]Not able to send mails to gmail account using javamail api

When I am trying to send a sample mail to gmail account, am getting com.sun.mail.smtp.SMTPAddressFailedException. 当我尝试将示例邮件发送到gmail帐户时,我收到com.sun.mail.smtp.SMTPAddressFailedException。 Following is the code i have written... Please can somebody help me to resolve the issue? 以下是我写的代码......有人可以帮我解决这个问题吗?

    public class MultiMimes {

public static void main(String[] args) throws Exception{

    Properties props = System.getProperties();
    props.setProperty("mail.smtp.host", "mailservername");
    props.put("mail.debug", "true");
    Session session = Session.getDefaultInstance(props,null);
    Message message = new MimeMessage(session);
    try{
        message.setSubject("I am a multipart text/html email" );
        Address toAddress =new InternetAddress("my gmail address");
        Address fromAddress =new InternetAddress("my organization address");
        message.setFrom(fromAddress);
        message.addRecipient(Message.RecipientType.TO, toAddress);

        MimeMultipart multipart1 = new MimeMultipart("alternative");

        // Create text message part
        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setContent("am text", "text/plain");
        textPart.setHeader("MIME-Version" , "1.0" );
        textPart.setHeader("Content-Type" , textPart.getContentType() );
          System.out.println("textPart.getContentType():"+textPart.getContentType());
        // Create html part
        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent("<html><body><b>am html</b></body></html>", "text/html");
        htmlPart.setHeader("MIME-Version" , "1.0" );
        htmlPart.setHeader("Content-Type" , "text/html" );
        System.out.println("htmlPart.getContentType():"+htmlPart.getContentType());
        //adding multiparts to message
        multipart1.addBodyPart(htmlPart);
        multipart1.addBodyPart(textPart);
        message.setContent(multipart1);

        //sending message
        Transport.send(message);
        System.out.println("mail sent successfully");
    }catch(AddressException ae){
        System.out.println("address exception");
        ae.printStackTrace();
    }
    catch(MessagingException e){
        System.out.println("message exception");
        e.printStackTrace();
    }


}

When i am using an email id from same domain (for ex: somebody@test.com) instead of gmail id, I am receiving the email. 当我使用来自同一域的电子邮件ID(例如:somebody@test.com)而不是gmail id时,我收到了该电子邮件。

First of all , you need to change your code part to this : 首先,您需要将代码部分更改为:

private static final String SMTP_HOST_NAME = "smtp.gmail.com";

Properties prop = new Properties();
prop.put("mail.smtp.host", SMTP_HOST_NAME);
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.port", "587");
prop.put("mail.smtp.auth", "true");

Authenticator auth = new SMTPAuthenticator();
Session session = Session.getDefaultInstance(prop, auth);

session.setDebug(debug);

And here is the SMTPAuthenticator Class : 这是SMTPAuthenticator类:

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
  * SimpleAuthenticator is used to do simple authentication
  * when the SMTP server requires it.
  */

public class SMTPAuthenticator extends Authenticator
{
  private static final String SMTP_AUTH_USER = "youremail@gmail.com";
  private static final String SMTP_AUTH_PASSWORD = "yourpassword";

  public PasswordAuthentication getPasswordAuthentication()
  {
    String username = SMTP_AUTH_USER;
    String password = SMTP_AUTH_PASSWORD;

   return new PasswordAuthentication(username,  password);
  }

} }

And please do change your from address to gmail and to address to anything, since your SMTP Authentication is being done by gmail, so that part must belong to gmail. 并且请将您的从地址更改为gmail以及解决任何问题,因为您的SMTP身份验证是由gmail完成的,因此该部分必须属于gmail。

Hope that might help. 希望可能有所帮助。

Regards 问候

Thanks to all...As i am new to satckoverflow... I am not able to find exact way to add appropriate comments.... 感谢所有...因为我是satckoverflow的新手...我无法找到确切的方法来添加适当的评论....

Here I am not trying to send mails via gmail server... I am just trying to send to some gmail user. 在这里,我不是试图通过gmail服务器发送邮件...我只是想发送给一些gmail用户。 with this code i am able to send mails to any one within the organization... but not to people outside the organization. 使用此代码,我可以向组织内的任何人发送邮件......但不能向组织外的人发送邮件。

any ways... I found the solution to my problem with "Prophesy Awaits" suggestion... I modified my code as below: 任何方式......我通过“Prophesy Awaits”建议找到了我的问题的解决方案......我修改了我的代码如下:

    package com.trx;

    import java.util.Properties;

    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.Address;
    import javax.mail.Authenticator;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;

    public class MultiMimes {

public static void main(String[] args) throws Exception{

    Properties props = System.getProperties();
    props.setProperty("mail.smtp.host", "mymailserver");
    props.put("mail.smtp.port", "25");
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "true");
    Authenticator auth = new SMTPAuthenticator();
    Session session = Session.getDefaultInstance(props, auth);
    Message message = new MimeMessage(session);
    try{
        message.setSubject("I am a multipart text/html email" );
        Address toAddress =new InternetAddress("my gmail address");
        Address fromAddress =new InternetAddress("my organization address");
        message.setFrom(fromAddress);
        message.addRecipient(Message.RecipientType.TO, toAddress);
        MimeMultipart multipart1 = new MimeMultipart("alternative");

        // Create text message part
        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setContent("am text", "text/plain");
        textPart.setHeader("MIME-Version" , "1.0" );
        textPart.setHeader("Content-Type" , textPart.getContentType() );
          System.out.println("textPart.getContentType():"+textPart.getContentType());
        // Create html part
        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent("<html><body><b>am html</b></body></html>",  "text/html");
        htmlPart.setHeader("MIME-Version" , "1.0" );
        htmlPart.setHeader("Content-Type" , "text/html" );
        System.out.println("htmlPart.getContentType():"+htmlPart.getContentType());
        //adding multiparts to message

        multipart1.addBodyPart(textPart);
        multipart1.addBodyPart(htmlPart);
        message.setContent(multipart1);

        //sending message
        Transport.send(message);
        System.out.println("mail sent successfully");
    }catch(AddressException ae){
        System.out.println("address exception");
        ae.printStackTrace();
    }
    catch(MessagingException e){
        System.out.println("message exception");
        e.printStackTrace();
    }


        }

   }

and i used same SMTPAuthenticator class provided by him... now i am able to send the mails form my organizations mailserver to any email id... Thanks again. 我使用了他提供的相同的SMTPAuthenticator类...现在我能够将组织邮件服务器的邮件发送到任何电子邮件ID ...再次感谢。

i think the host name is a problem so change mailservername to smtp.gmail.com 我认为主机名是一个问题所以将mailservername更改为smtp.gmail.com

for more information use this link 有关更多信息,请使用此链接

http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/ http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM