2012-04-10 57 views
5

我已經通過this的問題了,它的工作原理以及與自己的情況下,使用SSL使用JavaMail API發送電子郵件Android中使用SMTP,但沒有SSL

,我也試過this之一,這在某種程度上適合我的需要,但它不會在我的情況下工作。

我也看過this的話題,但仍然無法發送電子郵件,而不在我的代碼中使用SSL。

每次我發送郵件,它說「異常554,郵件被拒絕」

我真正需要的是使用::

郵件主機:「smtpout.secureserver.net」

端口號:

謝謝,

Haps。

回答

14

是我親愛的朋友,我可以幫助ü..

首先使用的mail.jar,activation.jar,它Additional.jar文件上傳您的項目

使用此郵件類

package com.technosoft.AkashEmailAddress; 

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.Date; 
import java.util.Properties; 
import javax.activation.CommandMap; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.MailcapCommandMap; 
import javax.mail.BodyPart; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

import android.util.Log; 


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 boolean _debuggable; 

    private Multipart _multipart; 


    public Mail() { 
    _host = "smtp.gmail.com"; // default smtp server 
    _port = "465"; // default smtp port 
    _sport = "465"; // default socketfactory port 

    _user = ""; // username 
    _pass = ""; // password 
    _from = ""; // email sent from 
    _subject = ""; // email subject 
    _body = ""; // email body 

    _debuggable = false; // debug mode on or off - default off 
    _auth = true; // smtp authentication - default on 

    _multipart = new MimeMultipart(); 

    // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added. 
    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 Mail(String user, String pass) { 
    this(); 

    _user = user; 
    _pass = pass; 
    } 

    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, this); 
    DataHandler handler = new DataHandler(new ByteArrayDataSource(_body.getBytes(), "text/plain")); 
     MimeMessage msg = new MimeMessage(session); 

     msg.setFrom(new InternetAddress(_from)); 
     msg.setDataHandler(handler); 
     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); 
     Log.v("mas", "Email was send"); 
     return true; 
    } else { 
     Log.v("mas", "Email was not send"); 
     return false; 

    } 
    } 
    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"); 
     } 
    } 

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

    private Properties _setProperties() { 
    Properties props = new Properties(); 

    props.put("mail.smtp.host", _host); 

    if(_debuggable) { 
     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; 
    } 

    // the getters and setters 
    public String getBody() { 
    return _body; 
    } 

    public void setBody(String _body) { 
    this._body = _body; 
    } 

public void setTo(String[] toArr) { 
    // TODO Auto-generated method stub 
    this._to=toArr; 
} 

public void setFrom(String string) { 
    // TODO Auto-generated method stub 
    this._from=string; 
} 

public void setSubject(String string) { 
    // TODO Auto-generated method stub 
    this._subject=string; 
} 

    // more of the getters and setters ….. 
} 

郵件類已發送()方法在您的主類中使用

Main class extends Activity{ 
    Mail m=new Mail("[email protected]","XXXXXXX"); 
    @SuppressWarnings("static-access") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.email); 
String[] toArr = {"[email protected]","[email protected]"}; 
     m.setTo(toArr); 
     m.setFrom("AKASH"); 
     m.setSubject("Your Subject"); 
     m.setBody("Your Message body"); 

     try { 
      boolean i= m.send(); 
      if(i==true){ 
       Toast.makeText(getApplicationContext(),"Email was sent successfully ",2000).show(); 

      } 
      else 
      { 
       Toast.makeText(getApplicationContext(),"Email was not sent successfully ",2000).show(); 

      } 

     } catch (Exception e2) { 
      // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 

} 
} 

使用此代碼享受 !

+1

感謝代碼@Akash,但你的例子也使用SSL和我想去無SSL。對不起:P – Harpreet 2012-04-10 05:54:29

+0

如果你有任何暗示,那麼PLZ告訴我們。 :) – Harpreet 2012-04-10 05:57:57

+3

http://stackoverflow.com/questions/1949871/java-mail-sslhandshakeexception-when-sending-email-on-port-25-without-ssl – 2012-04-10 06:11:24

3

這是我爲你的錯誤這意味着從你的IP被封鎖發送郵件。 下面的答案是從這個鏈接 http://postmaster.bluetie.com/subcontent/smtpCodes.php

554 - BL0002:郵件拒絕 - IP地址列入黑名單的xxx.xxx.xxx.xxx - 請參閱http://www.spamcop.net/w3m?action=checkblock&ip=xxx.xxx.xxx.xxx 此錯誤信息表明發送IP地址是在SpamCop中發現黑名單。移除/重置請求必須由發送方發出。 BlueTie無法從黑名單中刪除發送IP地址。您可能希望與您的ISP聯繫以獲得有關此類錯誤的進一步幫助。

+0

謝謝@Sandip。我想我在代碼中缺少一些東西。 – Harpreet 2012-04-10 05:56:09

+0

@Haps - 我認爲你錯過了代碼中的任何東西,如果你正好按照第一個例子鏈接,就像兩天前一樣,我使用相同的鏈接發送郵件並且它完美地工作......您需要查看您的Internet提供商或系統管理員 – 2012-04-10 06:06:47

+0

ok @Sandip。我應該檢查那些。 – Harpreet 2012-04-10 06:12:30

相關問題