此代码段发送邮件:
if (m.send()) {
Log.i("MAIL SENDER: ", "Succesfully");
Toast.makeText(getApplicationContext(),
"The log file has been sent",
Toast.LENGTH_LONG).show();
} else {
throw new MailException();
}
如果接收者的邮件不正确,例如example@gmail.co
不是example@gmail.com
代码运行到第一个 if 块。为什么当接收器不正确时会发生这种情况。有人可以帮我吗?
邮件设置从 SharedPreferences 中检索,并在此方法中检查:
public static boolean isValidEmailAddress(String email) {
boolean result = true;
try {
InternetAddress emailAddr = new InternetAddress(email);
emailAddr.validate();
} catch (AddressException ex) {
result = false;
}
return result;
}
当用户在文本字段中输入电子邮件地址并点击确定时,会发生以下情况:
if (isValidEmailAddress(mail))
editor.putString("Tomail", mail);
else
Toast.makeText(getApplicationContext(), "Invalid", Toast.LENGHT_LONG).show();
这只会检查邮件是否包含 a@
并且因此它是有效的。
在我的发送方法中:
public SendMail(Context c) {
this();
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(c);
_host = sharedPrefs.getString("host", null);
_port = sharedPrefs.getString("port", null);
_sport = sharedPrefs.getString("port", null);
_user = sharedPrefs.getString("mail", null);
_pass = sharedPrefs.getString("pw", null);
}
public boolean send() throws Exception {
Properties props = _setProperties();
if (!_user.equals("") && !_pass.equals("") && _to.length > 0
&& !_from.equals("") && !_subject.equals("")
&& !_body.equals("")) {
Session session = Session.getInstance(props,
new GMailAuthenticator(_user, _pass));
MimeMessage msg = new MimeMessage(session);
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());
// setup message body
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(_body);
_multipart.addBodyPart(messageBodyPart);
// Put parts in message
msg.setContent(_multipart);
// send email
Transport.send(msg);
return true;
} else {
return false;
}
}