2011-02-24 179 views
1

我的要求是从smtp服务器发送邮件。android:邮件发送错误

对我使用下面的代码:

package com.ixpenseit.email; 
import java.util.Date; 
import java.util.Properties; 
import javax.activation.CommandMap; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.activation.MailcapCommandMap; 
import javax.mail.BodyPart; 
import javax.mail.MessagingException; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

public class Mail extends javax.mail.Authenticator { 
private String _user; 
private String _pass; 
private String[] _to; 
private String _from; 
private String _port;  
private String _sport; 
private String _host; 
private String _subject; 
private String _body; 
private boolean _auth; 
private Multipart _multipart; 

private Mail() { 
_auth = true; // smtp authentication - default on 
_multipart = new MimeMultipart(); 
} 

public Mail(String smtpserver, String smtpport, String smtpsocketfactoryport) { 
_host = smtpserver; // default smtp server 
_port = smtpport; // default smtp port 
_sport = smtpsocketfactoryport; // default socketfactory port 
_auth = true; // smtp authentication - default on 
_multipart = new MimeMultipart(); 
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); 
} 

public void setCredential(String username, String password) { 
_user = username; 
pass = password; 
} 

public boolean send() throws AddressException, MessagingException{ 
Properties props = _setProperties(); 
if (Utility.isValidString(_user) && Utility.isValidString(_pass) && _to != null && Utility.isValidString(_from)&& Utility.isValidString(_body)&& Utility.isValidString(_subject) &&_to.length 0) { 
Session session = Session.getInstance(props, this); 
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;} 
} 

public void setEmail(String[] to, String from, String subject, String body) { 
_to = to; 
_body = body; 
_subject = subject; 
_from = from; 
} 

public void addAttachment(String filename) throws Exception { 
BodyPart messageBodyPart = new MimeBodyPart(); 
DataSource source = new FileDataSource(filename); 
messageBodyPart.setDataHandler(new DataHandler(source)); 
messageBodyPart.setFileName(filename); 
_multipart.addBodyPart(messageBodyPart); 
} 

public void addAttachment(String folder, String filename) throws Exception { 
BodyPart messageBodyPart = new MimeBodyPart(); 
DataSource source = new FileDataSource(folder + "" + filename); 
messageBodyPart.setDataHandler(new DataHandler(source)); 
messageBodyPart.setFileName(filename); 
_multipart.addBodyPart(messageBodyPart); 
} 

@Override 
public PasswordAuthentication getPasswordAuthentication() { 
return new PasswordAuthentication(_user, _pass); 
} 

private Properties _setProperties() { 
Properties props = new Properties(); 
props.put("mail.smtp.host", _host); 
props.put("mail.debug", "true"); 
if (_auth) {props.put("mail.smtp.auth", "true");} 
props.put("mail.smtp.port", _port); 
props.put("mail.smtp.socketFactory.port",_sport); 
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
props.put("mail.smtp.socketFactory.fallback", "false"); 
return props; 
} 
} 

主要活动代码:

mail.jar

activation.jar

additionnal.jar

上面的代码工作良好:从以下链接

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      sendEmail(); 
     } 
private void sendEmail() { 
     //Mail m = new Mail("smtp.gmail.com", "465", "465"); 

     Mail m = new Mail("smtp.dummy.com", "27", "27"); 
     m.setCredential("[email protected]", "dummy"); 

     String[] toArr = { "[email protected]" }; 
     m.setEmail(toArr, "[email protected]", "Auto Generated Expense Report", 
       "Auto Generated Body."); 

      try { 
       if (m.send()) { 
        Toast.makeText(Email.this, "Email was sent successfully.", 
          Toast.LENGTH_LONG).show(); 
       } else { 
        Toast.makeText(Email.this, "Email was not sent.", 
          Toast.LENGTH_LONG).show(); 
       } 
      } catch (AddressException e) { 
       // TODO Auto-generated catch block 
       Log.e("MailApp", "Could not send email", e); 
      } catch (MessagingException e) { 
       // TODO Auto-generated catch block 
       Log.e("MailApp", "Could not send email", e); 
      } 

下载罐为Gmail。 但是,当我使用Hotmail,雅虎试了一下,然后我自己的SMTP服务器,显示以下异常

02-24 12:34:31.347: ERROR/MailApp(3668): nested exception is: 02-24 12:34:31.347: ERROR/MailApp(3668):
java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error 02-24 12:34:31.347: ERROR/MailApp(3668): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:585 0xaf589bac:0x00000000) 02-24 12:34:31.347: ERROR/MailApp(3668):
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391) 02-24 12:34:31.347: ERROR/MailApp(3668): at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) 02-24 12:34:31.347: ERROR/MailApp(3668): at javax.mail.Service.connect(Service.java:288) 02-24 12:34:31.347: ERROR/MailApp(3668): at javax.mail.Service.connect(Service.java:169) 02-24 12:34:31.347: ERROR/MailApp(3668): at javax.mail.Service.connect(Service.java:118) 02-24 12:34:31.347: ERROR/MailApp(3668): at javax.mail.Transport.send0(Transport.java:188) 02-24 12:34:31.347: ERROR/MailApp(3668): at javax.mail.Transport.send(Transport.java:118) 02-24 12:34:31.347: ERROR/MailApp(3668): at com.ixpenseit.email.Mail.send(Mail.java:106) 02-24 12:34:31.347: ERROR/MailApp(3668): at com.email.Email.sendEmail(Email.java:48) 02-24 12:34:31.347: ERROR/MailApp(3668): at com.email.Email.onCreate(Email.java:22) 02-24 12:34:31.347: ERROR/MailApp(3668): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 02-24 12:34:31.347: ERROR/MailApp(3668): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 02-24 12:34:31.347: ERROR/MailApp(3668): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 02-24 12:34:31.347: ERROR/MailApp(3668): at android.app.ActivityThread.access$2100(ActivityThread.java:116) 02-24 12:34:31.347: ERROR/MailApp(3668): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 02-24 12:34:31.347: ERROR/MailApp(3668): at android.os.Handler.dispatchMessage(Handler.java:99) 02-24 12:34:31.347: ERROR/MailApp(3668): at android.os.Looper.loop(Looper.java:123) 02-24 12:34:31.347: ERROR/MailApp(3668): at android.app.ActivityThread.main(ActivityThread.java:4203) 02-24 12:34:31.347: ERROR/MailApp(3668): at java.lang.reflect.Method.invokeNative(Native Method) 02-24 12:34:31.347: ERROR/MailApp(3668): at java.lang.reflect.Method.invoke(Method.java:521) 02-24 12:34:31.347: ERROR/MailApp(3668): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 02-24 12:34:31.347: ERROR/MailApp(3668): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 02-24 12:34:31.347: ERROR/MailApp(3668): at dalvik.system.NativeStart.main(Native Method) 02-24 12:34:31.347: ERROR/MailApp(3668): Caused by: java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error 02-24 12:34:31.347: ERROR/MailApp(3668): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:585 0xaf589bac:0x00000000) 02-24 12:34:31.347: ERROR/MailApp(3668):
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method) 02-24 12:34:31.347: ERROR/MailApp(3668): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:305) 02-24 12:34:31.347: ERROR/MailApp(3668): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.(OpenSSLSocketImpl.java:502) 02-24 12:34:31.347: ERROR/MailApp(3668): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:443) 02-24 12:34:31.347: ERROR/MailApp(3668): at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:1449) 02-24 12:34:31.347: ERROR/MailApp(3668): at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1366)

我怎么可以尝试与其他SMTP服务器?

帮我一把。

回答

0

我得到了类似的例外。我在清单中添加了互联网许可,并开始工作。
尝试相同。