发送电​​子邮件的Andr​​oid应用程序 [英] Send email in android app

查看:227
本文介绍了发送电​​子邮件的Andr​​oid应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的Andr​​oid应用程序,有一个页面忘记了密码。当用户点击它,应用程序只是验证自己输入的电子邮件和密码发送到该邮箱。 意思,我只是想从Android应用程序发送的私人电子邮件,

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,

我已经做了工作,JavaMail API的,从我的Gmail帐户发送电子邮件,但它不是一个好办法,因为Gmail的块中的邮件帐户,如果是从多个国家在同一时间等访问(考虑该邮件为垃圾邮件并阻止它)

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?

感谢

推荐答案

使用下面的code在后台发送电子邮件。

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

}

注意:您需要添加的mail.jar和的activati​​on.jar此code工作

这篇关于发送电​​子邮件的Andr​​oid应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆