2017-09-29 21 views
-1

SwingでJavaで電子メールを送信しようとしましたが、修正方法が見つからないエラーが発生しました。コードがあります(これはどこかから取得していくつかのフィールドを削除しました)。送信電子メール機能でエラーが発生しました

import sun.plugin2.message.transport.Transport; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Properties; 

class SendEmailClient extends JFrame { 
    ....  
    private SendEmailClient() { 
     InitializeUI(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       SendEmailClient client = new SendEmailClient(); 
       client.setVisible(true); 
      } 
     }); 
    } 

    private void InitializeUI() { 
     setTitle("Send E-mail Client"); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     setSize(new Dimension(400, 280)); 

     // Header Panel 
     } 

    private class SendEmailActionListener implements ActionListener { 
     SendEmailActionListener() { 
     } 

     public void actionPerformed(ActionEvent e) { 
      Properties props = new Properties(); 
      props.put("mail.smtp.host", mailSmtpHostComboBox.getSelectedItem()); 
      props.put("mail.transport.protocol", "smtp"); 
      props.put("mail.smtp.starttls.enable", "true"); 
      props.put("mail.smtp.auth", "true"); 
      props.put("mail.smtp.port", "465"); 
      props.put("mail.smtp.socketFactory.port", "465"); 
      props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 

      Session session = Session.getDefaultInstance(props); 
      try { 
       InternetAddress fromAddress = new InternetAddress(fromField.getText()); 
       InternetAddress toAddress = new InternetAddress(toField.getText()); 

       javax.mail.Message message = new MimeMessage(session); 
       message.setFrom(fromAddress); 
       message.setRecipient(javax.mail.Message.RecipientType.TO, toAddress); 
       message.setSubject(subjectField.getText()); 
       message.setText(contentTextArea.getText()); 

       Transport.send(message, usernameField.getText(), 
         new String(passwordField.getPassword())); 
      } catch (MessagingException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 
} 

とMavenの依存関係(そのうちのいくつか必要とされていないかもしれない):

<dependency> 
    <groupId>org.jdesktop.bsaf</groupId> 
    <artifactId>bsaf</artifactId> 
    <version>1.9RC5</version> 
</dependency> 


<!-- https://mvnrepository.com/artifact/javax.mail/mail --> 
<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>mail</artifactId> 
    <version>1.4</version> 
</dependency> 

<dependency> 
    <groupId>javax.activation</groupId> 
    <artifactId>activation</artifactId> 
    <version>1.1.1</version> 
</dependency> 

し、送信機能にエラーがある:

java: cannot find symbol 
    symbol: method send(javax.mail.Message,java.lang.String,java.lang.String) 
    location: interface sun.plugin2.message.transport.Transport 

私はpomにいくつかの依存関係を追加しようとしていますが、間違ったデシソンと思われますが、どうすれば修正できるのか気にしないでください。

+0

スイングは電子メールの送信とは関係ありません。だからまず、電子メールのプロパティのデータをハードコーディングしてコードを動作させてください。その後、Swingを使用してメッセージと電子メールアドレスのユーザー入力を取得することにより、コードをより動的にします。 – camickr

答えて

0

まずは輸送クラスから正しいpacakge。

import javax.mail.Transport;//Use this 

は今すぐ交通クラスのセンド()メソッドを呼び出し、メッセージオブジェクトを渡し、ユーザー名とパスワード

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("[email protected]")); 
     message.setSubject("Testing Subject"); 
     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); 
    } 
関連する問題