使用javamail api通过Android应用程序发送邮件,无需用户交互

时间:2014-09-03 16:46:14

标签: android email javamail

我正在制作一个Android应用程序,我必须通过邮件发送一些文本,我尝试了很多代码,但他们在java项目中工作但不在android项目中,我搜索并尝试了几乎所有帖子在这里以及互联网上的任何地方但没有人工作,任何人都可以给我工作代码通过Android邮件中的java邮件API发送邮件,我几乎完成了我的应用程序,除了这个邮件部分。所以请帮我解决这个问题。

logcat错误如下: -

09-03 22:41:58.636:DEBUG / SntpClient(58):请求时间失败:java.net.SocketException:协议不支持的地址族

有趣的是我的应用程序在不同设备上出现不同的错误(printstack错误), 当我在模拟器上运行应用程序然后我得到错误

“无法连接到SMTP主机:smtp.gamil.com,port:587”

当我在我的Android手机上运行应用程序时,我得到错误: -

“权限被拒绝(缺少INTERNET权限?)”

我已经在清单文件中提供了INTERNET权限。

我已尝试过的代码位于以下链接: -

访问Cant send mail from android app using java mail api

访问https://stackoverflow.com/questions/24088195/application-has-closed-unexpecteadly-forse-closed

1 个答案:

答案 0 :(得分:0)

以下是如何做到这一点:

下载并添加这些jar文件后: commons-email.jar,mail.jar,activation.jar和additional.jar ,您应该可以在后台发送电子邮件。< / p>

  1. 首先,创建一个AsyncTask,以便您可以在后台发送电子邮件。然后在 doInBackground 中添加以下代码 - 根据需要替换值。

    public class EmailSenderAsync extends AsyncTask <String, Void, Boolean> {
    
      private HtmlEmail email;
    
    
      @Override
      protected Boolean doInBackground(String... params)
      {
        String textMsg;
        try {
           String userEmail = params[0];
           String message = param[1];
    
           email = new HtmlEmail();
    
           email.setAuthenticator(new DefaultAuthenticator("youremail@yahoo.com",   "yourpasswordhere"));
    
           email.setSmtpPort(587);
    
           email.setHostName("smtp.gmail.com");
    
           email.setDebug(true);
    
    
           email.addTo(userEmail, "Whatever you want here");
    
           email.setFrom("youremail@yahoo.com", "Your business name");
    
           email.setSubject("Your email subject here");
    
    
           email.getMailSession().getProperties().put("mail.smtps.auth", "true");
    
           email.getMailSession().getProperties().put("mail.debug", "true");
    
           email.getMailSession().getProperties().put("mail.smtps.port", "587");
    
           email.getMailSession().getProperties().put("mail.smtps.socketFactory.port", "587");
    
           email.getMailSession().getProperties().put("mail.smtps.socketFactory.class",  "javax.net.ssl.SSLSocketFactory");
    
           email.getMailSession().getProperties().put("mail.smtps.socketFactory.fallback", "false");
    
           email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true");
    
           email.setTextMsg(message);
    
           email.send();
    
    
           return true;
    
        } catch (Exception e){
    
           return false;
        }
    
    }
    
  2. 现在,您可以通过以下方式从需要发送电子邮件的地方拨打电话:

    new EmailSenderAsync().execute("useremail@gmail.com", "Thank you for contacting us this morning");
    

    这将解决您的问题。

    祝你好运,我希望这会有所帮助。