2017-09-11 16 views
0

次のコードは、javamail APIを使用してJavaアプリケーションから電子メール(gmailを使用)を送信するために使用されます。リクエストされたターゲット(avastがインストールされているウィンドウ)の有効な証明書パスが見つかりません

Linux(Kubuntu 16.04)では正常に動作していますが、WindowsではAvastウイルス対策シールドが有効です。

public void doSendGmail(){ 
    Connection con = Functions.ConnectToDB(); 
    try { 
     Statement stmt = con.createStatement(); 
     String sqlQuery = "select * from settings"; 
     ResultSet rs = stmt.executeQuery(sqlQuery); 

     while(rs.next()){ 
      String email = rs.getString("Email"); 
      //String pass = rs.getString("Password"); 
      byte [] pass = rs.getBytes("Password"); 

      cipher = Cipher.getInstance("DES/CTR/PKCS5Padding"); 
      cipher.init(Cipher.DECRYPT_MODE, keySpec,ivspec); 
      byte [] plain_text = cipher.doFinal(pass); 

      from = email; 
      password = new String(plain_text); 
     } 

     con.close();// close the connection 

    } catch (Exception e) { 
     JOptionPane.showMessageDialog(this, "Error retrieving email address and password\n"+e.toString(), 
       "Error",JOptionPane.ERROR_MESSAGE); 
    } 

    to = txtTo.getText(); 
    cc = txtCC.getText(); 
    bcc = txtBCC.getText(); 
    subject = txtSubject.getText(); 
    message_body = jtaMessage.getText(); 

    Properties props = new Properties(); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.port", "587"); 


    /*use authenticator as username and password are supplied 'on demand' i.e queried from database 
    or supplied via a login dialog*/ 
    Session session = Session.getInstance(props,new javax.mail.Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication(){ 
      return new PasswordAuthentication(from, password); 
     } 
    }); 

    try {    
     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); 
     if(!cc.equals("")){ 
      message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc)); 
     } 
     if(!bcc.equals("")){ 
      message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc)); 
     } 
     message.setSubject(subject); 

     if(filePathList.isEmpty()){// if a file(s) have not been attached... 
      message.setText(message_body); 
      Transport.send(message); 
     } 
     else{// if a file(s) have been attached 
      MimeBodyPart textPart = new MimeBodyPart(); 
      textPart.setText(message_body);// actual message 
      Multipart multipart = new MimeMultipart();// create multipart message 
      multipart.addBodyPart(textPart);//add the text message to the multipart 

      for(int i =0; i<filePathList.size(); i++){// use for loop to attach file(s) 
       MimeBodyPart attachmentPart = new MimeBodyPart(); 
       DataSource source = new FileDataSource((String)filePathList.get(i)); 
       attachmentPart.setDataHandler(new DataHandler(source)); 
       attachmentPart.setFileName((String)fileList.get(i)); 
       multipart.addBodyPart(attachmentPart);// add the attachment to the multipart 
       message.setContent(multipart);// add the multipart to the message 
      } 
      Transport.send(message); 
     } 

     JOptionPane.showMessageDialog(this, "Message Sent!","Sent",JOptionPane.INFORMATION_MESSAGE); 

    } catch (Exception e) { 
     JOptionPane.showMessageDialog(this, "Error sending email message\n"+e.toString(), 
       "Error",JOptionPane.ERROR_MESSAGE); 
    } 
} 

私はすべてのアバストシールドを無効にすると、次のエラーメッセージが

enter image description here

を表示されている、それだけで完璧にメールメッセージを送信します。

問題を修正するにはどうすればよいですか?

他のアンチウイルスと同じ効果がありますか?

答えて

0

Avastはサーバーとの安全な通信に介入している可能性があります。 おそらく、ウイルスやスパムの送信を防ぐことができます。しかし、それは の「中間の人」の役割を果たしているので、例外として、あなたの接続が安全でないことを正しく伝えています。

JavaMail FAQはあなたの信頼ストアに追加するには、またはmail.smtp.ssl.trustプロパティを設定することで、全く 証明書をチェックしないためにどのように InstallCertプログラムを使って、Avastの証明書を信頼する方法を説明します。

+0

mail.smtp.ssl.trustプロパティをtrueとfalseに設定しましたが、それでもまだ動作しませんでした。つまり、props.put( "mail.smtp.ssl.trust"、 "true"); – David

+0

上記のリンク先のプロパティの説明をお読みになりましたか?これを "true"に設定すると、 "true"という名前のホストが信頼されます。すべてのホストを信頼するには "*"に設定してみてください。 –

+0

ええ、私もそれを試みた。それはうまくいかなかった。 InstallCertプログラムを試してみて、それが動作するかどうか確認してみましょう – David

0

これが私のやり方です。私はこのリンクからInstallCertプログラムをダウンロードしました。その後、テキストエディタ(notepad ++)を使ってファイルを開き、ポートを443から465(gmailのSSLポート)に変更し、変更を保存しました。その後、私はファイルをコンパイルし、gmailホスト、つまりJava InstallCert smtp.gmail.comを提供するプログラムを実行しました。ファイル(jssecacerts)が生成されました。このファイルを$ JAVA_HOME/jre/lib/securityフォルダにコピーしました。私は最終的にすべてのavastシールドが走っている電子メールを送ることができました!

関連する問題