简体   繁体   中英

Send email in android app

I am working on android app, there is a page Forgot password . when user clicks on it, app just verify his entered email and send password to that email. Mean, i just want to send private email from android application,

I already have done work with JavaMail Api, sending email from my gmail account, but it is not a good way to do, because gmail block the mail account, if it is accessed from multiple countries at same time etc. (consider the mail as spam and blocked it)

Is there any authenticated and good way to get this done?

Thanks

Use the below code to send an E-Mail in Background.

public class EmailGengerator extends javax.mail.Authenticator {

private String _user;
private String _pass;

private String[] _to;
private String _from;

private final String _port;
private final String _sport;

private final String _host;

private String _subject;
private String _body;

private final boolean _auth;

private final boolean _debuggable;

private final Multipart _multipart;
private final Context context;

private Properties props ;
private MimeMessage msg;
private Session session; 
private boolean status;

/**
 * Public Constructor. 
 * @param context
 */
public EmailGengerator(Context context) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy); 

    this.context=context;
    _host = "smtp.gmail.com"; // default smtp server
    _port = "465"; // default smtp port
    _sport = "465"; // default socketfactory port
    status = false;
    _user = ""; // username
    _pass = ""; // password
    _from = ""; // email sent from
    _subject = ""; // email subject
    _body = ""; // email body

    _debuggable = false; // debug mode on or off - default off
    _auth = true; // smtp authentication - default on

    _multipart = new MimeMultipart();

    // There is something wrong with MailCap, javamail can not find a
    // handler for the multipart/mixed part, so this bit needs to be added.
    MailcapCommandMap mc = (MailcapCommandMap) CommandMap
            .getDefaultCommandMap();
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
    CommandMap.setDefaultCommandMap(mc);
}

public EmailGengerator(Context context,String user, String pass) {
    this(context);


    _user = user;
    _pass = pass;
}

/**
 * Function will handle the Sending Part,
 * @return
 * @throws Exception
 */
public boolean send() {
    try{


        props = _setProperties();

        session = Session.getInstance(props, this);

        msg = new MimeMessage(session);

        if (!_user.equals("") && !_pass.equals("") && _to.length > 0
                && !_from.equals("") && !_subject.equals("")
                && !_body.equals("")) {
            msg.setFrom(new InternetAddress(_from));
            InternetAddress[] addressTo = new InternetAddress[_to.length];
            for (int i = 0; i < _to.length; i++) {
                addressTo[i] = new InternetAddress(_to[i]);
            }
            msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);

            msg.setSubject(_subject);
            msg.setSentDate(new Date());
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText(_body);
            _multipart.addBodyPart(messageBodyPart);

            // Put parts in message
            msg.setContent(_multipart);

            // send email
            Transport.send(msg);

            status=true;            

        }else {

            status =false;
        }
    }catch(Exception ee){
        ((Activity)this.context).finish();
        ee.printStackTrace();
    }

    return status;
}

@Override
public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(_user, _pass);
}

private Properties _setProperties() {
    Properties props = new Properties();

    props.put("mail.smtp.host", _host);

    if (_debuggable) {
        props.put("mail.debug", "true");
    }

    if (_auth) {
        props.put("mail.smtp.auth", "true");
    }

    props.put("mail.smtp.port", _port);
    props.put("mail.smtp.socketFactory.port", _sport);
    props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");

    return props;
}

// the getters and setters
public String getBody() {
    return _body;
}

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

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

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

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


public void sendEmail(Context context, String toAddress) {


    /**
     * Setting Mail Creator.
     */
    EmailGengerator m = new EmailGengerator(context,"your mail id",
            "your password");

    String[] toArr = { toAddress };
    m.setTo(toArr);
    m.setFrom("your mail id");
    m.setSubject(your subject);
    m.setBody("message");

    m.send(); }

}

Note: You need to add Mail.Jar and Activation.jar for this code to work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM