当前位置: 首页 > 知识库问答 >
问题:

Android-Java通过javax.mail发送邮件失败

濮阳宁
2023-03-14

MainClass:

 try {
            GMailSender sender = new GMailSender(email, password);
            sender.sendMail("Forget Password",
                    "Hello this is your code 9986",
                    sender,
                    recvicer);
        } catch (Exception e) {
            Log.e("SendMail", e.getMessage(), e);
        }
public class GMailSender extends javax.mail.Authenticator {
    static {
        Security.addProvider(new JSSEProvider());
    }

    final String emailHost = "smtp.gmail.com";
    private final String user;
    private final String password;
    private final Session session;

    public GMailSender(String user, String password) {
        this.user = user;
        this.password = password;
        Properties props = new Properties();
        props.setProperty("mail.smtp.ssl.enable", "true");
        props.setProperty("mail.transport.protocol", "smtp");
        props.put("mail.smtp.user", user);
        props.setProperty("mail.smtp.ssl.trust", emailHost);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.quitwait", "false");
        session = Session.getInstance(props, this);
    }

    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(user, password);
    }

    public synchronized void sendMail(String subject, String body, String sender, String recipients) {
        try {
            MimeMessage message = new MimeMessage(session);
            DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
            message.setSender(new InternetAddress(sender));
            message.setSubject(subject);
            message.setDataHandler(handler);
            if (recipients.indexOf(',') > 0)
                message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
            else
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
            Transport transport = session.getTransport("smtp");
            transport.connect(emailHost, user, password);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (Exception e) {
            Log.e("SendMail", e.getMessage(), e);
        }
    }


    public static class ByteArrayDataSource implements DataSource {
        private final 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() {
            return new ByteArrayInputStream(data);
        }

        public String getName() {
            return "ByteArrayDataSource";
        }

        public OutputStream getOutputStream() throws IOException {
            throw new IOException("Not Supported");
        }
    }
}

例外情况:

共有1个答案

董翰池
2023-03-14

MainClass代码放置在AsyncTask中。因为GMailSender无法在主线程上工作。

  AsyncTask.execute(() -> {
                try {
                    GMailSender sender = new GMailSender(email, password);
                sender.sendMail("Forget Password",
                        "Hello this is your code 9986",
                        email,
                        recvicer);
                } catch (Exception e) {
                    Log.e("SendMail", e.getMessage(), e);
                }
            });
 类似资料:
  • 本文向大家介绍java发送javax.mail邮件实例讲解,包括了java发送javax.mail邮件实例讲解的使用技巧和注意事项,需要的朋友参考一下 平时我们网上逛网站的时候,经常会用到网站的注册。有很多方法,比如发短信验证,发邮箱验证。最近在SSH框架下,做了一个简单的邮件发送激活链接到邮箱,然后激活注册用户的一个功能。我用到的MailServer是易邮邮件服务器,引用的是javax.mail

  • 我正在尝试使用从hotmail帐户发送邮件。 到目前为止,我还使用gmail帐户测试了我的代码,一切都很好,但使用hotmail没有任何特别的工作,我收到了。 这是我用来发送邮件的代码: 如您所见,我创建了一个PropertiesFactory,以便为我使用的每个特定邮件主机创建Properties对象的特定实例。在代码中有HotmailProperties结构的工厂。 开始调试会话时,我检查了u

  • 我阅读了javamail-android的指南和一些关于StackOverflow的帖子。例如。如何在Android中使用JavaMail API发送邮件?我收到消息“邮件发送成功...”。但邮件不会到达收件人地址。我有以下输出: 我如何修复它或使用另一种方式发送电子邮件?

  • 本文向大家介绍Java通过exchange协议发送邮件,包括了Java通过exchange协议发送邮件的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java通过exchange协议发送邮件的具体代码,供大家参考,具体内容如下 pom.xml 导入包 application.properties 配置信息 代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊

  • 我想用Java从我的公司Outlook帐户发送邮件。但它说邮箱无法访问。我试过各种解决方案,比如更改主机名,但还是不行。错误保持不变。请对此提出任何解决方案。下面是我面临的错误片段。注意:我使用javax mail来实现这个目的。

  • 我正在使用Azure mobile services后端,我可以通过SendGrid成功地发送电子邮件。但是,每次我尝试添加附件时,它都失败了。我从来没有收到过邮件。经过一点研究,我发现我所需要的只是一个虚拟路径。我修改了路径名,但它仍然不工作。 我想不出为什么会失败。 下面是我的代码: