2013-12-14 265 views
0

我希望當我點擊按鈕時,電子郵件會自動發送給用戶。沒有電子郵件發送android

我也跟着這樣的:使用JavaMail API,而無需使用Android中發送電子郵件的默認/內置應用Android系統的使用,JavaMail的-API不-使用最默認內置-A

和這裏是我的代碼:https://stackoverflow.com/questions/20570957/sending-email-without-user-notice

沒有崩潰或錯誤,但沒有電子郵件被髮送!

有人可以幫我解決嗎?

謝謝

GmailSender類:

package com.example.tesst; 

import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.mail.BodyPart; 
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.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

import android.util.Log; 

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",imagePath; 
private String user; 
private String password; 
private Session session; 

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

public GmailSender(String user, String password,String imagePath) { 
    this.user = user; 
    this.password = password; 
    this.imagePath=imagePath; 
    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{ 


     Transport transport = session.getTransport(); 

     MimeMessage message = new MimeMessage(session); 
     message.setSubject(subject); 
     message.setFrom(new InternetAddress(sender)); 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients)); 

     // 
     // This HTML mail have to 2 part, the BODY and the embedded image 
     // 
     MimeMultipart multipart = new MimeMultipart("related"); 

     // first part (the html) 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     String htmlText = "<H1>"+body+"</H1>"; 
     messageBodyPart.setContent(htmlText, "text/html"); 

     // add it 
     multipart.addBodyPart(messageBodyPart); 

     // second part (the image) 
     // messageBodyPart = new MimeBodyPart(); 
    // DataSource fds = new FileDataSource(imagePath); 
    // messageBodyPart.setDataHandler(new DataHandler(fds)); 
    // messageBodyPart.setHeader("Content-ID",imagePath); 

     // add it 
     // multipart.addBodyPart(messageBodyPart); 

     // put everything together 
     message.setContent(multipart); 

     transport.connect(); 
     transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO)); 
     transport.close(); 
    }catch(Exception e){ 
     Log.e("", "FILE NOT FOUND EXCEPTION "+e.getMessage()); 
    } 
} 

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類

package com.example.tesst; 


    import java.security.AccessController; 

    import 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類別

package com.example.tesst; 


import android.os.Bundle; 

import android.app.Activity; 

import android.util.Log; 

import android.view.Menu; 

import android.view.View; 

import android.widget.Button; 


public class MainActivity extends Activity { 


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

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

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      try { 
        GmailSender sender = new GmailSender("[email protected]", "12345",""); 
        sender.sendMail("test","bla bla blaaaa","[email protected]","[email protected]"); 
       } 
      catch (Exception e) 
       { 
        Log.e("SendMail", e.getMessage(), e); 
       } 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 


} 
+0

請不要問兩次。此外,我鼓勵您在SO上熟悉[主題](http://stackoverflow.com/help/on-topic)上的內容,以保持良好的發展勢頭。 – block14

+0

可能重複[發送電子郵件沒有用戶通知](http://stackoverflow.com/questions/20570957/sending-email-without-user-notice) – block14

回答

0

在活動寫

try { 
        GmailSender sender = new GmailSender("gmailusername", "gmailpassword",""); 
        sender.sendMail("Registration to Model Apps:","username="+username+"\n password="+password,"gmailusername","gmailusername"); 
       } 
      catch (Exception e) 
       { 
        Log.e("SendMail", e.getMessage(), e); 
       } 



and create class GmailSender 

package com.example.ur;//write ur pakage 

import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.mail.BodyPart; 
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.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

import android.util.Log; 

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",imagePath; 
    private String user; 
    private String password; 
    private Session session; 

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

    public GmailSender(String user, String password,String imagePath) { 
     this.user = user; 
     this.password = password; 
     this.imagePath=imagePath; 
     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{ 


      Transport transport = session.getTransport(); 

      MimeMessage message = new MimeMessage(session); 
      message.setSubject(subject); 
      message.setFrom(new InternetAddress(sender)); 
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients)); 

      // 
      // This HTML mail have to 2 part, the BODY and the embedded image 
      // 
      MimeMultipart multipart = new MimeMultipart("related"); 

      // first part (the html) 
      BodyPart messageBodyPart = new MimeBodyPart(); 
      String htmlText = "<H1>"+body+"</H1>"; 
      messageBodyPart.setContent(htmlText, "text/html"); 

      // add it 
      multipart.addBodyPart(messageBodyPart); 

      // second part (the image) 
      // messageBodyPart = new MimeBodyPart(); 
     // DataSource fds = new FileDataSource(imagePath); 
     // messageBodyPart.setDataHandler(new DataHandler(fds)); 
     // messageBodyPart.setHeader("Content-ID",imagePath); 

      // add it 
      // multipart.addBodyPart(messageBodyPart); 

      // put everything together 
      message.setContent(multipart); 

      transport.connect(); 
      transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO)); 
      transport.close(); 
     }catch(Exception e){ 
      Log.e("", "FILE NOT FOUND EXCEPTION "+e.getMessage()); 
     } 
    } 

    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

package com.example.model; 


    import java.security.AccessController; 
    import 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; 
       } 
      }); 
     } 

} 

導入庫 - 的activation.jar additionnal.jar 的mail.jar

+0

我已經做到了這一點,請檢查此請http:// stackoverflow。 COM /問題/ 20570957 /發送電子郵件,而無需用戶事先通知 –

+0

這個代碼是在我的應用程序 –

+0

的工作,我會嘗試你希望它會工作:「( –

相關問題