I am trying to implement GMailSender into my app, however I am not seeing any results or any indication at all of something working. No error messages, and no emails. Here is my code, which is largely a reference from an example I've found. I was hoping to get it working prior to shaping for use by my app. Does anyone possibly know what else needs to be done in order for this to work? I've already set <uses-permission android:name="android.permission.INTERNET" /> in my AndroidManifest, as well as having the GMailSender.java in my project. Thank you for any and all responses! Here is the code:

public class SendMail extends Activity {  

@Override  
public void onCreate(Bundle icicle) {  
    super.onCreate(icicle);  
    setContentView(R.layout.activity_mail);  
    final Button send = (Button) this.findViewById(R.id.send);  
    final EditText userid = (EditText) this.findViewById(R.id.userid);  
    final EditText password = (EditText) this.findViewById(R.id.password);  
    final EditText from = (EditText) this.findViewById(R.id.from);  
    final EditText to = (EditText) this.findViewById(R.id.to);  
    final EditText subject = (EditText) this.findViewById(R.id.subject);  
    final EditText body = (EditText) this.findViewById(R.id.mailbody);  
    send.setOnClickListener(new View.OnClickListener() {  
        public void onClick(View view) {  
            GMailSender sender = new GMailSender(userid.getText().toString(), password.getText().toString());  
            try {  
                sender.sendMail(subject.getText().toString(),  
                        body.getText().toString(),  
                        from.getText().toString(),  
                        to.getText().toString());  
            } catch (Exception e) {  
                Log.e("SendMail", e.getMessage(), e);  
            }  
        }  
    });  
}  
}

Here is my GMailSender class:

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.lyricist.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");   
    }   
}   
}  
有帮助吗?

解决方案

@webhoodlum Please provide your code for GMailSender class. You need to do this task (sendMail) in asynctack. If you are trying to do network call in main thread then its not working well

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top