2013-12-07 3 views
0

У меня есть это приложение для Android, которое я хочу отправить электронной почте пользователю после того, как пользователь успешно зарегистрировался. Однако я не могу отправить электронное письмо. После того, как я нажимаю «Отправить», а «Я» перенаправляется на главную активность как успешно зарегистрированный пользователь, я жду около 10 секунд, а затем желтое сообщение об ошибке появляется в лог-кате, в котором говорится, что почта не была отправлена.Android отправка электронной почты SocketTimeoutException

Это где триггер отправки по электронной почте:

public class Signup extends Activity implements OnUserCreatedListener { 
    @Override 
    public void onUserCreated(Integer userId) { 

     editor = sharedPrefs.edit(); 
     editor.putBoolean("userLoggedInState", true); 
     editor.putInt("currentLoggedInUserId", userId); 
     editor.commit(); 

     Intent signupSuccessHome = new Intent(getApplicationContext(), Home.class); 
     signupSuccessHome.putExtra("reqFrom", "signup"); 
     startActivity(signupSuccessHome); 

     try { 
      new EmailSender(userEmail, Configurationz.Emailz.OFFICIAL_ADDRESS, Configurationz.Emailz.SUCCESSFUL_SIGNUP_SUBJECT, Configurationz.Emailz.SUCCESSFUL_SIGNUP_BODY(userName), null).execute(); 
     } catch (Exception e) { 
     } 
     finish(); 
    } 

Это утилита класса EmailSender

Это почтовый класс:

package net.asdasd.utilities; 

import java.util.Date; 
import java.util.Properties; 
import javax.activation.CommandMap; 
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 net.shiftinpower.configuration.Configurationz; 

public class Mail extends javax.mail.Authenticator { 
    public String user; 
    public String password; 
    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 String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getTo() { 
     return to; 
    } 

    public void setTo(String to) { 
     this.to = to; 
    } 

    public String getFrom() { 
     return from; 
    } 

    public void setFrom(String from) { 
     this.from = from; 
    } 

    public String getHost() { 
     return host; 
    } 

    public void setHost(String host) { 
     this.host = host; 
    } 

    public String getSubject() { 
     return subject; 
    } 

    public void setSubject(String subject) { 
     this.subject = subject; 
    } 

    public Multipart getMultipart() { 
     return multipart; 
    } 

    public void setMultipart(Multipart multipart) { 
     this.multipart = multipart; 
    } 
    public Mail() { 

     host = "smtp.googlemail.com"; // default smtp server 
     port = "465"; // default smtp port 
     sport = "465"; // default socketfactory port 
     user = Configurationz.Emailz.ASDASD_OFFICIAL_ADDRESS; 
     password = Configurationz.Emailz.ASDASD_OFFICIAL_PASSWORD;  
     _debuggable = false; // debug mode on or off - default off 
     _auth = true; // smtp authentication - default on 

     multipart = new MimeMultipart(); 
     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 boolean send() throws Exception { 
     Properties props = _setProperties(); 

     if (!user.equals("") && !password.equals("") && to.length() > 0 && !from.equals("") && !subject.equals("") && !body.equals("")) { 
      Session session = Session.getInstance(props, this); 
      MimeMessage msg = new MimeMessage(session); 
      msg.setFrom(new InternetAddress(from)); 
      InternetAddress[] addressTo = new InternetAddress[to.length()]; 
      for (int i = 0; i < to.length(); i++) { 
       addressTo[i] = new InternetAddress(to); 
      } 
      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); 
      return true; 
     } else { 
      return false; 
     } 
    } 

    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; 
    } 
    @Override 
    public PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(user, password); 
    } 
    // the getters and setters 
    public String getBody() { 
     return body; 
    } 

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

Это ошибка сообщение:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.googlemail.com, port: 465; 
    nested exception is: 
    java.net.SocketTimeoutException: Connection timed out 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) 
    at javax.mail.Service.connect(Service.java:310) 
    at javax.mail.Service.connect(Service.java:169) 
    at javax.mail.Service.connect(Service.java:118) 
    at javax.mail.Transport.send0(Transport.java:188) 
    at javax.mail.Transport.send(Transport.java:118) 
    at net.asdasd.utilities.Mail.send(Mail.java:120) 
    at net.asdasd.utilities.EmailSender.doInBackground(EmailSender.java:38) 
    at net.asdasd.utilities.EmailSender.doInBackground(EmailSender.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
    at java.lang.Thread.run(Thread.java:1019) 
Caused by: java.net.SocketTimeoutException: Connection timed out 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method) 
    at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437) 
    at java.net.Socket.connect(Socket.java:1002) 
    at java.net.Socket.connect(Socket.java:945) 
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233) 
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163) 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359) 
    ... 15 more 

И это предыдущая версия класса (и это сработало)

public class EmailSender { 
    public boolean sendEmail(String to, String from, String subject, String message, String[] attachements) throws Exception { 
     Mail mail = new net.shiftinpower.utilities.Mail(); 
     if (subject != null && subject.length() > 0) { 
      mail.setSubject(subject); 
     } else { 
      mail.setSubject("Subject"); 
     } 

     if (message != null && message.length() > 0) { 
      mail.setBody(message); 
     } else { 
      mail.setBody("Message"); 
     } 
     mail.setTo(to); 
     mail.setFrom(from); 
     return mail.send(); 

    } 
} 

Я также называть его по-другому:

В Signup.java:

private class sendVerificationEmail extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      emailSender.sendEmail(userEmail, Configurationz.Emailz.ASDASD_OFFICIAL_ADDRESS, Configurationz.Emailz.SUCCESSFUL_SIGNUP_SUBJECT, Configurationz.Emailz.SUCCESSFUL_SIGNUP_BODY(userName), null); 
     } catch (Exception e) { 
     } 
     return null; 
    } 
} 
class CreateUser extends AsyncTask<String, String, String> { 
//blah blah 
    @Override 
    protected void onPostExecute(String result) { 
     ShowLoadingMessage.dismissDialog(); 



     try { 
      new sendVerificationEmail().execute(); 
     } catch (Exception e) { 
     } 

     super.onPostExecute(result); 
    } 

ответ

1

Я не думаю, что smtp.googlemail.com существует; попробуйте smtp.gmail.com

+0

У меня такая же ошибка. BTW, с которым он работал, когда я использовал googlemail, но сегодня я сделал несколько рефакторингов, и он прекратил работать. –

Смежные вопросы