Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaMail,如果收件人邮件错误,则不会引发异常_Java - Fatal编程技术网

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我已经编辑了我的答案,请看一看。