2017-12-31 56 views
0

私はそれを自動にしたいので、インテントを使わずに私のアンドロイドアプリケーションで電子メールを送信したいと思います。電子メールは受信者に送信されません。私は見つけることができるすべてのチュートリアルを見てきましたが、私はまだ問題を解決できません。私はfiles.Iが私のマニフェストに意図なしのメール

<uses-permission android:name="android.permission.INTERNET" /> 

を追加した3つのjarファイルを追加、私は安全性の低いログインを許可するように自分のGmailの設定を変更しました。私はlogcatで何のエラーも出ません。私はこの方法に従っています。 Sending Email in Android using JavaMail API without using the default/built-in app

import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.mail.Message; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.security.Security; 
import java.util.Properties; 

public class GMailSender extends javax.mail.Authenticator { 
    private String mailhost = "smtp.gmail.com"; 
    private String user; 
    private String password; 
    private Session session; 

    static { 
     Security.addProvider(new com.example.hoda.myapplication.JSSEProvider()); 
    } 

    public GMailSender(String user, String password) { 
     this.user = user; 
     this.password = password; 

     Properties props = new Properties(); 
     props.setProperty("mail.transport.protocol", "smtp"); 
     props.setProperty("mail.host", mailhost); 
     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"); 
     props.put("mail.smtp.socketFactory.fallback", "false"); 
     props.setProperty("mail.smtp.quitwait", "false"); 

     session = Session.getDefaultInstance(props, this); 
    } 

    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(user, password); 
    } 

    public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception { 
     try { 
      MimeMessage message = new MimeMessage(session); 
      DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain")); 
      message.setSender(new InternetAddress(sender)); 
      message.setSubject(subject); 
      message.setDataHandler(handler); 
      if (recipients.indexOf(',') > 0) 
       message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients)); 
      else 
       message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients)); 
      Transport.send(message); 
     } catch (Exception e) { 

     } 
    } 

    public class ByteArrayDataSource implements DataSource { 
     private byte[] data; 
     private String type; 

     public ByteArrayDataSource(byte[] data, String type) { 
      super(); 
      this.data = data; 
      this.type = type; 
     } 

     public ByteArrayDataSource(byte[] data) { 
      super(); 
      this.data = data; 
     } 

     public void setType(String type) { 
      this.type = type; 
     } 

     public String getContentType() { 
      if (type == null) 
       return "application/octet-stream"; 
      else 
       return type; 
     } 

     public InputStream getInputStream() throws IOException { 
      return new ByteArrayInputStream(data); 
     } 

     public String getName() { 
      return "ByteArrayDataSource"; 
     } 

     public OutputStream getOutputStream() throws IOException { 
      throw new IOException("Not Supported"); 
     } 
    } 
} 

JSSEProvider.java

import java.security.AccessController; 

インポートjava.security.Provider。

public final class JSSEProvider extends Provider { 



    public JSSEProvider() { 

     super("HarmonyJSSE", 1.0, "Harmony JSSE Provider"); 

     AccessController 

       .doPrivileged(new java.security.PrivilegedAction<Void>() { 

        public Void run() { 

         put("SSLContext.TLS", 

           "org.apache.harmony.xnet.provider.jsse.SSLContextImpl"); 

         put("Alg.Alias.SSLContext.TLSv1", "TLS"); 

         put("KeyManagerFactory.X509", 

           "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl"); 

         put("TrustManagerFactory.X509", 

           "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl"); 

         return null; 

        } 

       }); 

    } 

} 

MainActivity.java

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 


public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final Button send = (Button) this.findViewById(R.id.mybtn); 
     send.setOnClickListener(new View.OnClickListener() { 


      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       Toast.makeText(MainActivity.this, "button does something", Toast.LENGTH_SHORT).show(); 

       try { 
        GMailSender sender = new GMailSender("[email protected]", "password"); 
        sender.sendMail("This is Subject", 
          "This is Body", 
          "[email protected]", 
          "[email protected]"); 
       } catch (Exception e) { 
        Log.e("SendMail", e.getMessage(), e); 
       } 

      } 
     }); 

    } 
} 
+0

「問題はまだ解決できません」問題は何ですか? – lucidbrot

+0

電子メールは受信者に送信されません。申し訳ありませんでした。 – helpmeplease

+0

デバッガでコードをステップ実行して、意図したとおりに動作するかどうか確認しましたか? Gmail以外のメールサーバーを使用している場合は何が起こるか試しましたか? – lucidbrot

答えて

0

ようにしたい時はいつでも、私はまだ問題が私の解決策としたまさに知っているが、変更しないでください実行それは私にとってこれを固定しました! https://github.com/steveholt55/JavaMail-API-Android

私のコードを見ている人は、トランスポートが切断されていますが、それを修正する方法がわからないと言っています。

0
private class AsyncTaskSendMail extends AsyncTask<String, String, String> { 

     @Override 
     protected String doInBackground(String... params) { 

      String host="server142.web-hosting.com";//change accordingly 
      final String user="*****@something.com";//change accordingly 
      final String password="*****";//change accordingly 

      String to="*****@something.com";//change accordingly 

      Properties props = new Properties(); 
      props.put("mail.smtp.host",host); 
      props.put("mail.smtp.auth", "true"); 

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

      try { 
       MimeMessage message = new MimeMessage(session); 
       message.setFrom(new InternetAddress(user)); 
       message.addRecipient(Message.RecipientType.TO,new InternetAddress(to)); 
       message.setSubject("SAIM TEST MAIL"); 
       message.setText("This is simple program of sending email using JavaMail API"); 

       //send the message 
       Transport.send(message); 

       System.out.println("message sent successfully..."); 

      } catch (MessagingException e) {e.printStackTrace();} 

      return ""; 
     } 


     @Override 
     protected void onPostExecute(String result) { 

     } 


     @Override 
     protected void onPreExecute() { 

     } 


     @Override 
     protected void onProgressUpdate(String... text) { 

     } 

    } 

次にあなたがこの

new AsyncTaskSendMail().execute("Sending Email");//Passing Dummy Parameter 
+0

どのような違いがありますか?非同期で送信していますか? – lucidbrot

+0

この「java.net.UnknownHostException:smtp.gmail.com」エラーが表示されますが、UIスレッドのIIRCネットワークでは例外が発生します – helpmeplease