2012-04-10 31 views
5

Tôi đã trải qua this câu hỏi, nó hoạt động tốt với trường hợp riêng của mình sử dụng SSLGửi email trong android sử dụng JavaMail API với smtp nhưng không có SSL

và tôi cũng đã cố gắng this một, mà bằng cách nào đó phù hợp với nhu cầu của tôi, nhưng nó sẽ không hoạt động trong trường hợp của tôi.

Tôi cũng đã đọc chủ đề this nhưng vẫn không thể gửi email mà không sử dụng SSL trong mã của mình.

Mỗi lần tôi gửi thư nó nói "ngoại lệ 554, Mail từ chối"

những gì tôi thực sự cần là sử dụng ::

mailhost: "smtpout.secureserver.net"

port-no:

Cảm ơn,

Haps.

Trả lời

14

có người bạn thân của tôi, tôi có thể giúp u ..

Thứ nhất sử dụng mail.jar, activation.jar, Additional.jar Tải lên tệp trong dự án của bạn

Sử dụng Thư này Lớp

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 ….. 
} 

Lớp thư đã gửi() Phương thức sử dụng trong Lớp học chính của bạn

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

} 
} 

Sử dụng mã này Và tận hưởng !

+1

Cảm ơn bạn đã mã @Akash, nhưng ví dụ của bạn cũng là bằng cách sử dụng SSL và tôi muốn không có SSL. Xin lỗi.:P – Harpreet

+0

nếu bạn có bất kỳ gợi ý về điều đó thì plz sẽ cho chúng tôi biết. :) – Harpreet

+3

http://stackoverflow.com/questions/1949871/java-mail-sslhandshakeexception-when-sending-email-on-port-25-without-ssl –

3

Đây là những gì tôi nhận được cho lỗi của bạn có nghĩa là gửi thư từ ip của bạn bị chặn. bên dưới câu trả lời là từ liên kết này http://postmaster.bluetie.com/subcontent/smtpCodes.php

554 - BL0002: Thư từ chối - Địa chỉ IP xxx.xxx.xxx.xxx Danh sách đen - Xin vui lòng xem http://www.spamcop.net/w3m?action=checkblock&ip=xxx.xxx.xxx.xxx Thông báo lỗi này chỉ ra địa chỉ IP gửi đã được tìm thấy trên SpamCop Blacklist. Yêu cầu xóa/đặt lại phải được gửi bởi bên gửi. BlueTie không thể xóa địa chỉ IP gửi khỏi Danh sách đen. Bạn có thể liên hệ với ISP của mình để được hỗ trợ thêm về các lỗi về bản chất này.

+0

Cảm ơn @Sandip. Tôi nghĩ rằng tôi đang thiếu một cái gì đó trong mã. – Harpreet

+0

@Haps - Tôi không nghĩ rằng bạn đang thiếu bất kỳ thứ gì trong mã nếu bạn theo dõi ví dụ đầu tiên đúng cách chỉ hai ngày trở lại Tôi đã sử dụng cùng một liên kết để gửi thư và nó hoạt động hoàn hảo ... Bạn cần phải xem nhà cung cấp Internet hoặc quản trị hệ thống –

+0

ok @Sandip. Tôi nên kiểm tra chúng. – Harpreet

Các vấn đề liên quan