Send email in android using JavaMail API with smtp

2020-02-09 14:04发布

I have gone through this question, it works well with its own case using SSL

and I have also tried this one, which somehow suits to my need but it won't worked in my case.

I have also read this topic but still not able to send a email without using SSL in my code.

Everytime I send a mail it says "Exception 554, Mail Refused"

what i really need is to use::

mailhost: "smtpout.secureserver.net"

port-no: 25

Thanks,

Haps.

2条回答
【Aperson】
2楼-- · 2020-02-09 14:55

Firstly use Mail.jar, activation.jar, Additional.jar file Upload in Your project

Use this Mail Class

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

Mail class has send() Method use in Your Main class

Main class extends Activity{
    Mail m=new Mail("DefultUserID@gmail.com","XXXXXXX");
    @SuppressWarnings("static-access")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.email);
 String[] toArr = {"UserEmailID_1@gmail.com","UserEmail_ID@Yahoo.co.in"}; 
        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();
        }

}
}
查看更多
Rolldiameter
3楼-- · 2020-02-09 14:58

This is what I get for your error which means sending mail from your ip is blocked. below answer is from this link http://postmaster.bluetie.com/subcontent/smtpCodes.php

554 - BL0002: Mail Refused - IP Address xxx.xxx.xxx.xxx Blacklisted - Please see http://www.spamcop.net/w3m?action=checkblock&ip=xxx.xxx.xxx.xxx This error message indicates the sending IP address was found on the SpamCop Blacklist. A removal/reset request must be issued by the sending party. BlueTie cannot remove the sending IP address from the Blacklist. You may wish to contact your ISP for further assistance with errors of this nature.

查看更多
登录 后发表回答