2012-04-10 7 views
5

I już przez this pytanie, to działa dobrze z własnym przypadku korzystania z protokołu SSLWyślij e-mail w Android przy użyciu JavaMail API z smtp ale bez SSL

i Próbowałem również this jeden, który w jakiś sposób odpowiada na moje potrzeby, ale to nie zadziała w moim przypadku.

Przeczytałem również temat this, ale nadal nie mogę wysłać wiadomości e-mail bez użycia SSL w moim kodzie.

Everytime I wysłać pocztę mówi "Wyjątek 554 Mail Odmowa"

co naprawdę potrzebne jest użycie ::

MAILHOST: "smtpout.secureserver.net"

port-no:

Dzięki

Haps.

Odpowiedz

14

tak mój drogi przyjacielu mogę pomóc u ..

Po pierwsze używać Mail.jar, activation.jar, Additional.jar upload plików w projekcie

Korzystanie z tej poczty klasy

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

klasa Poczta ma send() należy użyć metody w głównym klasy

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

} 
} 

użyć tego kodu I baw się dobrze !

+1

Dzięki za kod @Akash, ale twój przykład jest również za pomocą SSL i chcę iść bez SSL. Przepraszam.:P – Harpreet

+0

jeśli masz jakieś wskazówki na ten temat, to plz powiedz nam. :) – Harpreet

+3

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

3

Oto, co dostaję za Twój błąd, co oznacza, że ​​wysyłanie wiadomości z twojego adresu IP jest zablokowane. poniżej odpowiedź jest z tego linku http://postmaster.bluetie.com/subcontent/smtpCodes.php

554 - BL0002: Poczta Odmowa - Adres IP XXX.XXX.XXX.XXX czarnej liście - proszę zobaczyć http://www.spamcop.net/w3m?action=checkblock&ip=xxx.xxx.xxx.xxx Ten komunikat o błędzie wskazuje, że adres IP nadawcy został znaleziony na Spamcop Blacklist. Żądanie usunięcia/zresetowania musi zostać wysłane przez stronę wysyłającą. BlueTie nie może usunąć wysyłającego adresu IP z Czarnej listy. Możesz skontaktować się z usługodawcą internetowym, aby uzyskać dalszą pomoc w przypadku takich błędów.

+0

Dzięki @Sandip. Myślę, że brakuje mi czegoś w kodzie. – Harpreet

+0

@Haps - Nie sądzę, że brakuje ci czegoś w kodzie, jeśli podążysz za pierwszym przykładem odnośnika poprawnie, ponieważ zaledwie dwa dni temu użyłem tego samego linku do wysłania maili i działa idealnie ... Musisz zobaczyć swojego dostawcę Internetu lub administrator systemu –

+0

ok @Sandip. Powinienem to sprawdzić. – Harpreet

Powiązane problemy