我尝试使用我从这里采用的一些已知方法,从我的Android应用程序以编程方式发送和发送电子邮件。
该方法与gmail帐户一起运行良好,但是当我尝试使用不同的提供商帐户,例如hotmail,yahoo,outlook时,它会抛出此错误:
07-04 13:18:34.736: I/System.out(32140): ERROR SENDING MESSAGE: javax.mail.MessagingException: Could not connect to SMTP host: smtp-mail.outlook.com, port: 587;
07-04 13:18:34.736: I/System.out(32140): nested exception is:
07-04 13:18:34.736: I/System.out(32140): javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x7912c980: Failure in SSL library, usually a protocol error
07-04 13:18:34.736: I/System.out(32140): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x7387f7d0:0x00000000)
我使用以下凭据发送邮件:
用户:@ hotmail.com 主持人:smtp-mail.outlook.com 港口:587
尝试使用不同的帐户(所有帐户都是非gmail),每次都会收到相同的错误。
我的MailSender
课程是:
public class MailSender{
public synchronized static void sendMail(String[] dest, String org, String pass, String body, String port, String host){
String[] to = dest;
final String user = org;
final String password = pass;
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);
Properties props = new Properties();
props.put("mail.smtp.user", user);
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user,password);
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(user));
InternetAddress[] addressTo = new InternetAddress[to.length];
for (int i = 0; i < to.length; i++) {
addressTo[i] = new InternetAddress(to[i]);
}
message.setRecipients(MimeMessage.RecipientType.TO, addressTo);
message.setSubject("Arcas Ollé Alarm Message");
BodyPart messageBody = new MimeBodyPart();
messageBody.setText(body);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBody);
message.setContent(multipart );
Transport.send(message);
System.out.println("MESSAGE SENT...");
}catch (MessagingException ex) {
System.out.println("ERROR SENDING MESSAGE: "+ ex);
}
}
}
我称之为方法:
MailSender.sendMail(dest, org, pass, body, port, host);
正如我之前所说,该方法适用于gmail帐户,因此我不认为这是一个数据解析问题,而且我确定我尝试的所有凭据都是正确的。
这可能是礼仪问题。
所以如果有人能帮我解决这个问题,我会非常感激。
提前致谢,
margabro。
答案 0 :(得分:2)
供参考:
Gmail-主机: smtp.gmail.com,端口:465
Hotmail-主持人: smtp.live.com,端口:587
Yahoo-主持人: smtp.mail.yahoo.com,端口:465
答案 1 :(得分:0)
在此网站中创建您的帐户以进行测试
您是否使用POP邮件服务器尝试此设置?
的Hotmail / MSN
接收邮件服务器:pop3.live.com
安全类型= SSL
服务器端口995
外发邮件服务器:smtp.live.com
需要登录=是
安全类型= TLS
服务器端口587
答案 2 :(得分:0)
我终于找到了一个解决方案(经过大量的研究和测试)。我发布它作为答案,以防其他人有同样的问题。
在邮件发件人类中,我在属性代码中进行了以下更改:
Properties props = new Properties();
props.put("mail.smtp.user", user);
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", "587");
//props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
为所有主机添加了端口587作为套接字工厂端口,并注释了该行:
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
我测试和使用的主机的配置是:
- HOTMAIL / OUTLOOK -
主持人: smtp.live.com
PORT: 25
- GMAIL -
主持人: smtp.gmail.com
PORT: 587
- YAHOO! - 强>
主持人: smtp.mail.yahoo.com
PORT: 587
希望有所帮助:)