2013-06-19 52 views
2

我真的不知道在我的代碼中。我已經在stackoverflow中嘗試了建議的代碼,但仍然沒有得到正確的異步任務或線程。嘗試推薦的代碼時,我總是會遇到錯誤。請有人幫助我如何做正確的異步任務或線程。這裏是我的代碼:什麼異步任務或線程應該用於發送電子郵件

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

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

      try { 
       GMailSender sender = new GMailSender((from.getText().toString()), 
       (pass.getText().toString())); 
       sender.sendMail((subject.getText().toString()), 
         (body.getText().toString()), 
         (from.getText().toString()), 
         (to.getText().toString())); 

      } catch (Exception e) { 
       Log.e("SendMail", e.getMessage(), e); 
      } 

     } 
    }); 

這裏是我GmailSender:

public class GMailSender extends javax.mail.Authenticator { 
private String mailhost = "smtp.gmail.com"; 
private String user; 
private String password; 
private Session session; 
private String[] _to; 
private String _from; 
private String _subject; 
private String _body; 

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

public GMailSender(String editable, String password) { 
    this.user = editable; 
    // 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"); 
    } 

    } 


    public String getBody() { 
    return _body; 
    } 

    public void setBody(String _body) { 
    this._body = _body; 
    } 

    public String[] getTo() { 
    return _to; 
    } 

    public void setTo(String[] _to) { 
     this._to=_to; 
    } 

    public void setFrom(String string) { 
     // TODO Auto-generated method stub 
     this.set_from(string); 
    } 

    public void setSubject(String string) { 
     this.set_subject(string); 
    } 

public String get_from() { 
    return _from; 
} 

public void set_from(String _from) { 
    this._from = _from; 
} 

public String get_subject() { 
    return _subject; 
} 

public void set_subject(String _subject) { 
    this._subject = _subject; 
} 
} 

對不起,一遍問這種問題。我只是不能得到正確的答案。任何幫助,將不勝感激。非常感謝你提前.. T.T。

+0

如上所述[這裏](http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without-using-the-default-built-in-a/2033124 #2033124),我不會使用GMail發件人。首先,您似乎通過editText獲取了電子郵件和密碼帳戶。用戶如何相信在處理AsyncTask中的郵件時不會將這些數據發送給您? –

+0

我只是按照例子,並嘗試它是否工作。但它沒有。 – Drx

回答

0

你可以在onClick事件中啓動一個線程,它會預編程ANR,當你的應用程序嘗試發送電子郵件時,你也可以嘗試顯示進度條。

+0

嗯,我已經嘗試過該代碼,但它仍然無法正常工作。 – Drx

相關問題