通过程序从最近的Android系统发送电子邮件

通过程序从最近的Android系统发送电子邮件,android,jakarta-mail,sendmail,android-internet,Android,Jakarta Mail,Sendmail,Android Internet,我已经阅读了这里的链接。我曾经尝试过这种方法,例如,当用户按下按钮时,通过编程发送电子邮件 它在2.3.7版本的Android上也能工作 问题是,当尝试在较新版本的Android(如4.1.2)上启动应用程序时,它什么也做不了。在这些设备上会显示toast,但不会发送电子邮件 因此,我尝试了这段代码,但它也不起作用 ... sendButton.setOnClickListener(new OnClickListener() { @Override public

我已经阅读了这里的链接。我曾经尝试过这种方法,例如,当用户按下按钮时,通过编程发送电子邮件

它在2.3.7版本的Android上也能工作

问题是,当尝试在较新版本的Android(如4.1.2)上启动应用程序时,它什么也做不了。在这些设备上会显示toast,但不会发送电子邮件

因此,我尝试了这段代码,但它也不起作用

...
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 = "account@gmail.com";
       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;
       }

}

有什么帮助吗?

您可能发现了这个错误

android.os.NetworkOnMainThreadException
看到这个了吗


使用这个

你可能发现了这个错误

android.os.NetworkOnMainThreadException
看到这个了吗


使用这个

我认为你最好弄清楚为什么链接问题中的解决方案(看起来很完整)在4.1.2中不起作用,而不是使用新的基于SMTP的解决方案。您试过调试该版本吗?@antlersoft是调试时,在按下应发送电子邮件的底部时,调试器说:Thread[android.hardware.SystemSensorManager$SensorThread](正在运行)这正是我进入包含该按钮的页面时比较的消息我已解决问题添加:props.put(“mail.smtp.connectiontimeout”、“t1”);props.put(“mail.smtp.timeout”、“t2”);where String t1=“2000”;String t2=“1000”;我认为您最好弄清楚链接问题中的解决方案(看起来相当完整)的原因在4.1.2中无法使用新的基于SMTP的解决方案。您尝试过调试该版本吗?@antlersoft是调试时,在按下应发送电子邮件的底部时,调试器显示:Thread[android.hardware.SystemSensorManager$SensorThread](正在运行)这正是当我进入包含该按钮的页面时比较的消息。我已经解决了添加的问题:props.put(“mail.smtp.connectiontimeout”,“t1”);props.put(“mail.smtp.timeout”,“t2”);其中String t1=“2000”;String t2=“1000";嘿谢谢你的帮助。我没有发现任何错误。它就是不起作用!我试图在后台执行它(如[此处]所示),但它也不起作用。为什么不使用emailIntent?嘿谢谢你的帮助。我没有发现任何错误。它就是不起作用!我试图在后台执行它(如[此处]所示),但它也不起作用。为什么不使用emailIntent?