2016-10-02 13 views
0

SMTP経由で電子メールを送信するためのシンプルなjavamailクラスがあります。私は1つのアドレスからメールを送信する限り動作します。私は別のアドレスを使用してみた場合、それはいくつかの理由で、この例外が発生します:JavaMail - 複数の送信者

com.sun.mail.smtp.SMTPSendFailedException: 550 5.1.0 Use your own address, please.

はここに私のクラスです:

 

    public class EmailSender { 

     private static final String HOST = "xxxx.xxxxxx.xx"; 
     private static final String PORT = "xx"; 

     public static boolean sendMail(String from, String to, String pass, String subject, String text){ 

       Properties properties = new Properties(); 

       properties.setProperty("mail.smtp.host", HOST); 
       properties.setProperty("mail.smtp.port", PORT); 
       properties.setProperty("mail.smtp.auth", "true"); 
       properties.setProperty("mail.user", from); 
       properties.setProperty("mail.password", pass); 

       Session session = Session.getDefaultInstance(properties, new CustomAuthenticator(from, pass)); 

       try { 
        MimeMessage message = new MimeMessage(session); 
        message.setFrom(new InternetAddress(from)); 
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
        message.setSubject(subject); 
        message.setText(text); 

        Transport.send(message); 

        return true; 
       }catch (MessagingException e) { 
        e.printStackTrace(); 
        return false; 
       } 
     } 
    } 

あなたが迷っている場合は、CustomAuthenticatorクラスは次のようになります。

 

    public class CustomAuthenticator extends Authenticator{ 
     private String user; 
     private String pw; 
     public CustomAuthenticator (String username, String password){ 
      super(); 
      this.user = username; 
      this.pw = password; 
     } 
     public PasswordAuthentication getPasswordAuthentication(){ 
      return new PasswordAuthentication(user, pw); 
     } 
    } 

答えて

0

あなたのサーバーはあなたのものではないアドレスを使用させることはありません。サーバーによっては、他のアドレスもあなたのものであると納得させる方法があるかもしれません。通常、「あなたのもの」とは、「ログイン時に使用したアカウントに関連付けられたアドレス」を意味します。

+0

ログアウトする方法はありますか? –

+0

Transport.sendを使用すると、新しい接続を作成し、ログインし、メッセージを送信し、接続を閉じてログアウトします。 –

0

解決策は、SMTPTransportクラスを使用することです。

 
    public class EmailSender { 

     private static final String HOST = "xxxx.xxxxxx.xx"; 
     private static final String PORT = "xx"; 

     public static boolean sendMail(String from, String to, String pass, String subject, String text){ 

       Properties properties = new Properties(); 

       properties.setProperty("mail.smtp.port", PORT); 
       properties.setProperty("mail.smtp.auth", "true"); 

       Session session = Session.getDefaultInstance(properties, new CustomAuthenticator(from, pass)); 

       try { 
        MimeMessage message = new MimeMessage(session); 
        message.setFrom(new InternetAddress(from)); 
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
        message.setSubject(subject); 
        message.setText(text); 

        SMTPTransport tp = (SMTPTransport)session.getTransport(); 
        tp.connect(HOST, from, pass); 
        tp.sendMessage(message, message.getAllRecipients()); 
        tp.close(); 

        return true; 
       }catch (MessagingException e) { 
        e.printStackTrace(); 
        return false; 
       } 
     } 
    } 
関連する問題