2013-02-24 115 views
4

我正在Android应用程序,有一个页面忘记密码。当用户点击它时,应用程序只需验证他输入的电子邮件并将密码发送到该电子邮件。 意思是,我只是想发送私人的电子邮件从Android应用程序,发送电子邮件在Android应用程序

我已经做了JavaMail Api的工作,从我的Gmail帐户发送电子邮件,但它不是一个好办法,因为Gmail阻止邮件帐户,如果它是从多个国家同时访问等等(将邮件视为垃圾邮件并将其屏蔽)

是否有任何已通过身份验证的好方法来完成此操作?

感谢

+2

在你的情况下,我将制作一个服务器端文件,例如:PHP,ASP ..你擅长什么,并在你的应用程序中调用它来发送电子邮件。例如:http://domain.ltd/[email protected]。你的服务器应该完成这项工作。 – Alamri 2013-02-24 19:59:08

+0

@Alamri有一些smtp商业服务器,我们可以直接从android应用程序使用它们吗?像这个。 http://www.smtp2go.com/ – 2013-02-24 20:03:05

+0

smtp2go.com似乎是一个好主意寿! – Alamri 2013-02-24 20:14:09

回答

0

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

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和activation.jar此代码工作。

相关问题