【问题标题】:mail sending in Java programJava程序中的邮件发送
【发布时间】:2012-01-24 12:00:39
【问题描述】:

我正在使用以下代码使用 Java 程序发送电子邮件 (gmail)。我收到了AuthenticationFailedException。我在下面提到了错误。如何解决这个问题?在这个程序中如何使用发件人用户名、密码?

        package internet;

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

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


              String to = "xxx@gmail.com";
              String from = "yyy@gmail.com";


              String host = "smtp.gmail.com";


              Properties properties = System.getProperties();


              properties.put("mail.smtp.host", "smtp.gmail.com");
              properties.put("mail.smtp.port", "587");
              properties.put("mail.smtp.auth", "true");
              properties.put("mail.smtp.starttls.enable", "true");



              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("hi");
                 System.out.println("Sent message successfully....");
              }catch (MessagingException mex) {
                 mex.printStackTrace();
              }
           }
        }

我收到以下错误

    javax.mail.AuthenticationFailedException
            at javax.mail.Service.connect(Service.java:267)
            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 internet.mail.main(mail.java:59)

【问题讨论】:

  • 检查google.co.in/…的结果
  • 用户名和密码在哪里设置?不要在代码中看到它。

标签: java email gmail jakarta-mail


【解决方案1】:

您必须在t.sendMessage(message, addresses) 之前提供t.connect(host, user, password) 的登录凭据。 (首先使用Transport t = session.getTransport("smtp") 获取Transport 对象。

【讨论】:

  • 不,这行不通。 Transport.send 是一个忽略 Transport 实例的静态方法,因此忽略了您在该实例上执行的“连接”。您需要使用 Transport.sendMessage 方法。请参阅 JavaMail 常见问题解答 (oracle.com/technetwork/java/javamail/faq/index.html#connectsend)。
  • 感谢您的提示。答案已调整。
【解决方案2】:

您是否尝试过本教程? http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

好像忘记设置用户名和密码了。

【讨论】:

    【解决方案3】:

    您可以使用javax.mail.Authenticator 扩展来执行此操作。举个例子:

    public class MySMTPAuthenticator extends javax.mail.Authenticator {
    
        private String userName;
        private String password;
    
        public MySMTPAuthenticator(String userName, String password) {
            super();
            this.userName=userName;
            this.password=password;
        }
    
        public PasswordAuthentication getPasswordAuthentication() {
           return new PasswordAuthentication(userName, password);
        }
    
    }
    

    然后,要使用它,在您的发送代码处,您将获得与 Authenticator 的会话:

        Authenticator auth = new MySMTPAuthenticator("user", "password");
        Session session = Session.getDefaultInstance(MySMTPAuthenticator, auth);
    

    【讨论】:

      【解决方案4】:

      下载 Java Mail API 和, 使用两个 jar 作为依赖发送邮件 mailapi.jar 和 smtp.jar

      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 JavaEmail {
      
          Properties emailProperties;
          Session mailSession;
          MimeMessage emailMessage;
      
        public static void main(String args[]) throws AddressException, MessagingException {
            JavaEmail javaEmail = new JavaEmail();
            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 = { "abc@pqr.com" };//Specify array of mail id to send multiple person
            String emailSubject = "Java Email";
            String emailBody = "This is an email sent by <b>JavaMail</b> 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 = "your emailid here";//just the id alone without @gmail.com
            String fromUserEmailPassword = "your email password here";
            Transport transport = mailSession.getTransport("smtp"); 
            transport.connect(emailHost, fromUser, fromUserEmailPassword);
            transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
            transport.close();
            System.out.println("Email sent successfully.");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-09-08
        • 2018-05-10
        • 2016-11-21
        • 2021-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-27
        • 2019-06-11
        相关资源
        最近更新 更多