2013-05-15 3 views
1

Я читал question здесь. Я пробовал этот метод для отправки электронной почты программно, когда, например, пользователь нажимает кнопку.Отправляйте по электронной почте программно из последних Android

Работает над версией Android 2.3.7.

Проблема в том, что при попытке запустить приложение на более поздней версии Android (например, 4.1.2) это ничего не значит. На этих устройствах появляется тост, но электронная почта не отправляется.

Итак, я пробую этот код, но он не работает.

... 
sendButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

      //Read EditText 
      EditText text = (EditText)findViewById(R.id.editText1); 
      String my_mail = text.getText().toString().toLowerCase(); 

      if (my_mail.matches("")){ 
       Toast toast = Toast.makeText(context, "Please insert a valid email address!", Toast.LENGTH_LONG); 
       toast.show(); 
      } 

      //send mail 
      try { 
          WebSendMail(my_mail); 

          Toast toast = Toast.makeText(context, "Email sent!",  Toast.LENGTH_LONG); 
       toast.show(); 
        } catch (Exception e) { 
          Log.e("SendMail", e.getMessage(), e); 
        } 

     } 
    }); 

public static boolean WebSendMail(String mail){ 

     //email sender parameter 
     String smtpHost = "smtp.gmail.com"; 
     String addressFrom = "[email protected]"; 
     String login = addressFrom; 
     String password = "password"; 
     String subject = "Subject!"; 

     String message = "html code"; 

     try { 
     Properties props = new Properties(); 
     props.setProperty("mail.host", smtpHost); 
     props.setProperty("mail.smtp.port", "587"); 
     props.setProperty("mail.smtp.auth", "true"); 
     props.setProperty("mail.smtp.starttls.enable", "true"); 

     Authenticator auth = new SMTPAuthenticator(login, password); 

     Session session = Session.getInstance(props, auth); 

     MimeMessage msg = new MimeMessage(session); 
     msg.setText(message); 
     msg.setSubject(subject); 
     msg.setContent(message, "text/html"); 
     msg.setFrom(new InternetAddress(addressFrom)); 
     msg.addRecipient(Message.RecipientType.TO, new InternetAddress(mail)); 
     Transport.send(msg); 
     return true; 

     } catch (Exception ex) { 
      return false; 
     } 

} 

Любая помощь?

+0

Я думаю, вы бы лучше выяснить, почему решение в связанном вопросе (который кажется довольно полным) не работает в 4.1.2, чем собирается с новым решением на основе SMTP. Вы пробовали отлаживать эту версию? – antlersoft

+0

@antlersoft да при отладке, при нажатии на нижнюю часть, которая должна отправлять электронную почту, отладчик говорит: ** Тема [<12> android.hardware.SystemSensorManager $ SensorThread] (Бег) ** Это точно сообщение, которое сравнивается, когда я вхожу в страница, содержащая эту кнопку –

+0

Я решил проблему добавить: * props.put ("mail.smtp.connectiontimeout", "t1"); * * props.put ("mail.smtp.timeout", "t2 "); * где String t1 =" 2000 "; Строка t2 = "1000"; –

ответ

1

Вы могли бы выяснить эту ошибку

android.os.NetworkOnMainThreadException 

Смотрите эту http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-ics.html

и использовать http://developer.android.com/reference/android/os/AsyncTask.html

+0

Эй. Спасибо за вашу помощь. Я не понимаю никаких ошибок. Это просто не работает! Я попытался выполнить его в фоновом режиме (как показано [здесь] http://stackoverflow.com/questions/14374578/using-asynctask-to-send-android-email), но он тоже не работает. –

+0

Почему вы не используете emailIntent? http://www.codeproject.com/Tips/268122/Send-email-with-attachment-by-android –

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

  • Нет связанных вопросов^_^