0

请帮助如何解决这个问题。在这里我提到很多链接。但我的问题没有解决。我知道很多人在这里提出同样的问题。我尝试了很多时间,但没有工作。 Gmail使用发送邮件工作。但我希望其他domail使用发送邮件。以下错误将显示在logcat的javax.mail.MessagingException - 发送邮件背景

 javax.mail.MessagingException: Could not connect to SMTP host: trucksoft.net, port: 25; 

     javax.net.ssl.SSLHandshakeException: Handshake failed 



my source code here 


public class GmailSender extends javax.mail.Authenticator { 
    private String mailhost = "smtp.gmail.com"; 
    private String user; 
    private String password; 
    private Session session; 

    static { 
     Security.addProvider(new JSSEProvider()); 
    } 

    public GmailSender(String user, String password) { 
     this.user = user; 
     this.password = password; 

     Properties props = new Properties(); 
      props.put("mail.smtp.host", "trucksoft.net"); 
      props.put("mail.smtp.auth", "true"); 
      props.put("mail.debug", "true"); 
      props.put("mail.smtp.port", 25); 
      props.put("mail.smtp.socketFactory.port", 25); 
      props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
      props.put("mail.smtp.socketFactory.fallback", "false"); 




     session = Session.getDefaultInstance(props, this); 
    } 

    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(user, password); 
    } 

    public synchronized void sendMail(String subject, String body, 
      String sender, String recipients) throws Exception { 
     try { 
      MimeMessage message = new MimeMessage(session); 
      DataHandler handler = new DataHandler(new ByteArrayDataSource(
        body.getBytes(), "text/plain")); 
      message.setSender(new InternetAddress(sender)); 
      message.setSubject(subject); 
      message.setDataHandler(handler); 
      if (recipients.indexOf(',') > 0) 
       message.setRecipients(Message.RecipientType.TO, 
         InternetAddress.parse(recipients)); 
      else 
       message.setRecipient(Message.RecipientType.TO, 
         new InternetAddress(recipients)); 
      Transport.send(message); 
     } catch (Exception e) { 
Log.e("exec", ""+e.toString()); 
     } 
    } 

    public class ByteArrayDataSource implements DataSource { 
     private byte[] data; 
     private String type; 

     public ByteArrayDataSource(byte[] data, String type) { 
      super(); 
      this.data = data; 
      this.type = type; 
     } 

     public ByteArrayDataSource(byte[] data) { 
      super(); 
      this.data = data; 
     } 

     public void setType(String type) { 
      this.type = type; 
     } 

     public String getContentType() { 
      if (type == null) 
       return "application/octet-stream"; 
      else 
       return type; 
     } 

     public InputStream getInputStream() throws IOException { 
      return new ByteArrayInputStream(data); 
     } 

     public String getName() { 
      return "ByteArrayDataSource"; 
     } 

     public OutputStream getOutputStream() throws IOException { 
      throw new IOException("Not Supported"); 
     } 
    } 
} 

回答

0

下面是我用来解决同样的问题代码:

public void sendEmail(){ 
Properties props = new Properties(); 
props.put("mail.smtp.starttls.enable", "true"); 
props.put("mail.smtp.starttls.required", "true"); 
props.put("mail.smtp.sasl.enable", "false"); 
Session session = Session.getInstance(props); 

final URLName unusedUrlName = null; 
SMTPTransport transport = new SMTPTransport(session, unusedUrlName); 
final String emptyPassword = null; 
transport.connect("smtp.gmail.com", 587, "[email protected]", emptyPassword); 
// you can get the access token when you do Auth2 for gmail, I haven't tried this with just a password 
byte[] response = String.format("user=%s\1auth=Bearer %s\1\1", "[email protected]", accessToken).getBytes(); 
response = BASE64EncoderStream.encode(response); 
transport.issueCommand("AUTH XOAUTH2 " + new String(response), 235); 


Message message = new MimeMessage(session); 
//add needed stuff to the message before sending it. 

transport.sendMessage(message, message.getAllRecipients()); 
transport.close(); 

}