отправка почты в программе Java - PullRequest
0 голосов
/ 24 января 2012

Я использую следующий код для отправки электронной почты (gmail) с помощью программы Java.Я получаю 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)

Ответы [ 4 ]

2 голосов
/ 24 января 2012

Вы должны предоставить свои учетные данные для входа в систему с t.connect(host, user, password) до t.sendMessage(message, addresses).(Получите объект Transport первым с Transport t = session.getTransport("smtp").

1 голос
/ 24 января 2012

Вы пробовали этот урок? http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

Похоже, вы забыли установить имя пользователя и пароль.

1 голос
/ 24 января 2012

Вы можете использовать расширение 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 auth = new MySMTPAuthenticator("user", "password");
    Session session = Session.getDefaultInstance(MySMTPAuthenticator, auth);
0 голосов
/ 24 января 2014

Загрузите Java Mail API и, Используйте две банки в качестве зависимости для отправки электронной почты 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.");
    }
}
...