web-dev-qa-db-ja.com

JavaMail APIを介してメールを送信中に、SMTPホスト例外に接続できませんでした

JavaMail APIを使用してGmailアカウントにメールを送信しようとしています。次のコードを実行しました。複数のレシピエントにメールを送信したいのですが、機能していません。「SMTP Host.sendingに接続できませんでした」などの例外が発生します

package com.cts.email;

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 SendEmail {     
      Properties emailProperties;  
      Session mailSession;
      MimeMessage emailMessage;   
      public static void main(String args[]) throws MessagingException, javax.mail.MessagingException {      
            SendEmail javaEmail = new SendEmail();  
            Session session=javaEmail.setMailServerProperties();   
            javaEmail.createEmailMessage(session);  
          //  javaEmail.sendEmail(); 
            }    
      public Session setMailServerProperties() {    
          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");

        Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("my_email","my_password");
                }
            });
                return session; 
      }    

            public void createEmailMessage(Session session) throws MessagingException, javax.mail.MessagingException {    
                  String[] toEmails = { "[email protected]","[email protected]" };  
                  try {
                      for (String to_mail : toEmails) {


                    Message message = new MimeMessage(session);
                    message.setFrom(new InternetAddress("[email protected]"));
                    message.setRecipients(Message.RecipientType.TO,
                            InternetAddress.parse(to_mail));
                    message.setSubject("Java Email");
                    message.setText("This is an email sent by <b>JavaMail</b> api.");

                    Transport.send(message);



                }
                      System.out.println("Done");
                  }catch (MessagingException e) {
                    throw new RuntimeException(e);
                }   
                }    


                        }

次の例外が発生します:

Exception in thread "main" Java.lang.RuntimeException: javax.mail.SendFailedException: Sending failed;
  nested exception is:
    class javax.mail.MessagingException: Could not connect to SMTP Host: smtp.gmail.com, port: 465;
  nested exception is:
    Java.net.ConnectException: Connection refused: connect
    at com.cts.email.SendEmail.createEmailMessage(SendEmail.Java:62)
    at com.cts.email.SendEmail.main(SendEmail.Java:21)
Caused by: javax.mail.SendFailedException: Sending failed;
  nested exception is:
    class javax.mail.MessagingException: Could not connect to SMTP Host: smtp.gmail.com, port: 465;
  nested exception is:
    Java.net.ConnectException: Connection refused: connect
    at javax.mail.Transport.send0(Transport.Java:218)
    at javax.mail.Transport.send(Transport.Java:80)
    at com.cts.email.SendEmail.createEmailMessage(SendEmail.Java:55)
    ... 1 more

これを通して私を助けてください。

11

これは私にとってはうまくいきます:

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 SendMail {


    public static void sendEmail(String to)
    {
        final String username = "your_usename_goes_here";
        final String password = "your_password_goes_here";

        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");

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

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("[email protected]"));
            message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(to));
            message.setSubject("A testing mail header !!!");
            message.setText("Dear Mail Crawler,"
                + "\n\n No spam to my email, please!");

            Transport.send(message);

            System.out.println("Done");

        } 

        catch (MessagingException e) 
        {
            // throw new RuntimeException(e);
            System.out.println("Username or Password are incorrect ... exiting !");
        }
    }


    public static void main(String[] args) 
    {
        String to = "[email protected]";
        sendEmail(to);
    }
}
9
JAN

接続する機能をブロックしているファイアウォールまたはウイルス対策プログラムがほぼ確実にあります。 JavaMail FAQ for 接続問題のデバッグのヒント を参照してください。

3
Bill Shannon

接続を許可するようにウイルス対策ソフトウェアとファイアウォールを設定してください

String user= "[email protected]";
String pass= "FROMPASSWORD";
String mailhost = "smtp.gmail.com";

Properties props= System.getProperties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.user", user);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
        "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");

Session session= Session.getDefaultInstance(props, new javax.mail.Authenticator()  {

    @Override
    protected javax.mail.PasswordAuthentication getPasswordAuthentication(){
        return new javax.mail.PasswordAuthentication(user,pass);   
    }
}); 

MimeMessage message= new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
message.setSubject("Checking....");
message.setText("Successful",user,pass);
Transport.send(message);
System.out.println("Sent!");
0
user7621988