2

i really dont know what to in my code. I already tried the suggested code here in stackoverflow but still didnt get the right Async task or Thread. I always get error trying those recommended code. please someone help me how to do the right Async task or Thread. here is my code:

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);   
            } 

        }
    });

and here is my 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;
}
 }  

Sorry for asking this kind of questions all over again. I just cant get the right answer. Any help would be appreciated. Thank you very much in advance.. T.T .

Drx
  • 167
  • 2
  • 12
  • As stated [here](http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without-using-the-default-built-in-a/2033124#2033124), I wouldn't use the GMail sender. First it seems like you're getting email and password account through editText. How can the user trust that you won't send this datas to you when processing the mail in the AsyncTask ? – Alexis C. Jun 19 '13 at 09:23
  • i just follow the example and try if it works. but it didnt. – Drx Jun 19 '13 at 09:34

1 Answers1

0

You can start a thread in onClick event, it will prevetn ANR, also you can try to show progress bar while your app trying to send EMail.

AAnkit
  • 27,299
  • 12
  • 60
  • 71