我正在开发 android 应用程序,有一个页面Forgot password。当用户点击它时,应用程序只需验证他输入的电子邮件并将密码发送到该电子邮件。意思是,我只想从 android 应用程序发送私人电子邮件,
我已经使用 JavaMail Api 完成了工作,从我的 gmail 帐户发送电子邮件,但这不是一个好方法,因为 gmail 会阻止邮件帐户,如果它同时从多个国家访问等(将邮件视为垃圾邮件并阻止它)
有没有经过身份验证的好方法来完成这项工作?
谢谢
使用以下代码在后台发送电子邮件。
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 才能使此代码正常工作。