JavaMail,如果收件人邮件错误,则不会引发异常
此代码段发送一封邮件:JavaMail,如果收件人邮件错误,则不会引发异常,java,Java,此代码段发送一封邮件: 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@gma
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块中。当接收者不正确时,为什么会发生这种情况。有人能帮我吗
从SharedReferences检索邮件设置,并使用以下方法进行检查:
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();
这将仅检查邮件是否包含@
及其有效性
在我的发送方法中:
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;
}
}
publicssendmail(上下文c){
这个();
SharedPrefers=PreferenceManager.getDefaultSharedPreferences(c);
_host=sharedPrefs.getString(“主机”,null);
_port=sharedPrefs.getString(“port”,null);
_sport=sharedPrefs.getString(“端口”,null);
_user=sharedPrefs.getString(“邮件”,null);
_pass=sharedPrefs.getString(“pw”,null);
}
public boolean send()引发异常{
Properties props=_setProperties();
如果(!\u user.equals(“”&)&!\u pass.equals(“”&&)to.length>0
&&!\u from.equals(“”)&!\u subject.equals(“”)
&&!\u正文。等于(“”){
会话=会话.getInstance(props,
新的GMailAuthenticator(_user,_pass));
MimeMessage msg=新MimeMessage(会话);
msg.setFrom(新的Internet地址(_-from));
InternetAddress[]addressTo=新的InternetAddress[_to.length];
对于(int i=0;i<\u to.length;i++){
addressTo[i]=新的Internet地址(_to[i]);
}
msg.setRecipients(mimessage.RecipientType.TO,addressTo);
msg.setSubject(_subject);
msg.setSentDate(新日期());
//设置消息正文
BodyPart messageBodyPart=新的MimeBodyPart();
messageBodyPart.setText(_body);
_multipart.addBodyPart(messageBodyPart);
//将部件放入消息中
msg.setContent(_多部分);
//发送电子邮件
发送(msg);
返回true;
}否则{
返回false;
}
}
validate()
方法中使用的isValidEmailAddress()
遵循RFC822的语法规则。不幸的是,”example@gmail.co“被视为有效邮件,因此返回true。您可以使用RFC822 over检查邮件的有效性
文件:
更新:您必须进行额外的验证,请查看发生这种情况是因为邮件是一种异步协议。基本上,邮件不会发送到目的地,它只是发送到您的本地邮件服务器,而您的本地邮件服务器会对其进行智能处理。最终。几小时后
如果出现问题,邮件的发件人将收到一封带有错误消息的邮件,因此您最好确保地址正确
这意味着只在以后检查接收器地址。没有办法验证它们。您可以执行一些简单的模式匹配验证来检查损坏的域名,但这将在几个月后停止工作,因为新的顶级域名将可用,我将获得我的digulla@home
电子邮件地址。您的邮件发送服务器可以检查gmail.com是否存在。它无法判断示例是否在该服务器上。所以它会发送它。发送成功。因此没有错误。我的代码中是否有这样做的方法?例子将是伟大的!没错,我使用自己的电子邮件帐户作为发送者和接收者。我收到一条“无法发送邮件”的消息。你可以用Java编写自己的邮件服务器,但有时发送邮件可能需要两天时间。m.send()
的一个版本,它最多会阻塞两天,可能没有用…:-)@TobiasMoeThorstensen我已经编辑了我的答案,请看一看。