2016-09-06 35 views
1

私は、JavaMailのとSMTP(Gmailの)、ここに私のコードです使用しています:はSTARTTLSコマンド最初にJavaを発行する必要があります

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 Email {  
    Properties emailProperties; 
    Session mailSession; 
    MimeMessage emailMessage; 

    public static void main(String args[]) throws AddressException, 
      MessagingException { 

     Email javaEmail = new Email(); 

     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 = { "[email protected]" }; 
     String emailSubject = "Java Email"; 
     String emailBody = "This is an email sent by JavaMail 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 = "yourusername";//just the id alone without @gmail.com 
     String fromUserEmailPassword = "your_password"; 

     Transport transport = mailSession.getTransport("smtp"); 

     transport.connect(emailHost, fromUser, fromUserEmailPassword); 
     transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); 
     transport.close(); 
     System.out.println("Email sent successfully."); 
    } 

} 

エラーメッセージ:

Exception in thread "main" javax.mail.MessagingException: 530 5.7.0 
Must issue a STARTTLS command first. n80sm23847952pfi.25 - gsmtp 
    at 
com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1020) 
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:716) 
    at 
com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:388) 
    at com.mail.Email.sendEmail(Email.java:68) at 
com.mail.Email.main(Email.java:26) 

答えて

0

は、この行を変更してみてくださいでした:

Transport t = session.getTransport("smtps"); 

必要なユーザー名とパスワードを入力する必要がありますあなたのメールサーバーは です。プロトコルを「smtps」から に変更して、SSL経由で安全な接続を行うことができます。

ここに完全な情報:私の場合はhttp://www.oracle.com/technetwork/java/javamail/faq/index.html#gmail

+0

はい、有効なユーザー名とパスワードを提供しています。その行を変更すると、次のエラーが発生します。スレッド "main"の例外javax.mail.NoSuchProviderException:smtpsのプロバイダがありません \t at javax.mail.Session.getProvider(Session.java:436) \t at javax.mail .Session.getTransport javax.mail.Session.getTransport(Session.java:612)で(Session.java:631) \t com.mail.Email.sendEmailで\t(Email.java:65) \t COMました。 mail.Email.main(Email.java:26) –

+0

この質問のようです:http://stackoverflow.com/questions/2980408/java-mail-no-provider-for-smtp –

+0

サポートjars:mail.jarとactivation.jarがクラスパスに存在します。 –

0

私はIBM-た使用する場合、上記の問題が発生しました - *瓶。 javax.mail-version.jar(バージョンは1.5.5のような数字)にjarファイルを切り替えると解決します。

関連する問題