发送电子邮件的Android应用程序 [英] Send email in android app
问题描述
我工作的Android应用程序,有一个页面忘记了密码。当用户点击它,应用程序只是验证自己输入的电子邮件和密码发送到该邮箱。 意思,我只是想从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和的activation.jar此code工作
这篇关于发送电子邮件的Android应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!