1

此代码段发送邮件:

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;
    }
}
4

2 回答 2

2

这是因为邮件是异步协议。基本上,邮件不会传递到目的地,它只是传递到您的本地邮件服务器,该服务器对其进行了一些智能操作。最终。几个小时后。

如果出现问题,邮件的发件人会收到一封带有错误消息的邮件,因此您最好确保地址正确。

这意味着仅在以后检查接收方地址。没有办法验证它们。digulla@home你可以做一些简单的模式匹配验证来检查损坏的域名,但是当新的顶级域可用并且我得到我的电子邮件地址时,这将在几个月内停止工作。

于 2012-08-17T13:59:39.727 回答
0

validate()isValidEmailAddress()方法中使用遵循 RFC822 的语法规则。不幸的是,“example@gmail.co”被认为是有效邮件,因此它返回 true。您可以在此处使用 RFC822 检查邮件的有效性。

文档:validate()InternetAddress 类


更新:你将不得不做额外的验证,看看http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/

于 2012-08-17T13:47:13.563 回答