简体   繁体   English

在Android应用中发送电子邮件

[英]Send email in android app

I am working on android app, there is a page Forgot password . 我正在开发Android应用程序,有一个页面忘了密码 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, 意思是,我只是想从Android应用程序发送私人电子邮件,

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) 我已经完成了JavaMail Api的工作,从我的Gmail帐户发送电子邮件,但这不是一个好方法,因为gmail会阻止邮件帐户,如果它是从多个国家/地区同时访问的等等(请将邮件视为垃圾邮件并阻止它)

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. 注意:您需要添加Mail.Jar和Activation.jar才能使此代码生效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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