如何使用 GMail、Yahoo 或 Hotmail 通过 Java 应用程序发送电子邮件?

2023-12-13

是否可以使用 GMail 帐户从我的 Java 应用程序发送电子邮件?我已经使用 Java 应用程序配置了我公司的邮件服务器来发送电子邮件,但是当我分发应用程序时,这并不会减少它。使用 Hotmail、Yahoo 或 GMail 的任何答案都可以接受。


首先下载Java邮件API并确保相关的 jar 文件位于您的类路径中。

这是使用 GMail 的完整工作示例。

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class Main {

    private static String USER_NAME = "*****";  // GMail user name (just the part before "@gmail.com")
    private static String PASSWORD = "********"; // GMail password
    private static String RECIPIENT = "[email protected]";

    public static void main(String[] args) {
        String from = USER_NAME;
        String pass = PASSWORD;
        String[] to = { RECIPIENT }; // list of recipient email addresses
        String subject = "Java send mail example";
        String body = "Welcome to JavaMail!";

        sendFromGMail(from, pass, to, subject, body);
    }

    private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
        Properties props = System.getProperties();
        String host = "smtp.gmail.com";
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.user", from);
        props.put("mail.smtp.password", pass);
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props);
        MimeMessage message = new MimeMessage(session);

        try {
            message.setFrom(new InternetAddress(from));
            InternetAddress[] toAddress = new InternetAddress[to.length];

            // To get the array of addresses
            for( int i = 0; i < to.length; i++ ) {
                toAddress[i] = new InternetAddress(to[i]);
            }

            for( int i = 0; i < toAddress.length; i++) {
                message.addRecipient(Message.RecipientType.TO, toAddress[i]);
            }

            message.setSubject(subject);
            message.setText(body);
            Transport transport = session.getTransport("smtp");
            transport.connect(host, from, pass);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        }
        catch (AddressException ae) {
            ae.printStackTrace();
        }
        catch (MessagingException me) {
            me.printStackTrace();
        }
    }
}

当然,您会想要在以下领域做更多事情catch块而不是打印堆栈跟踪,就像我在上面的示例代码中所做的那样。 (去除catch块以查看来自 JavaMail API 的哪些方法调用会引发异常,以便您可以更好地了解如何正确处理它们。)


谢谢@jodonnel以及其他所有回答的人。我给他悬赏是因为他的回答让我得到了大约 95% 的完整答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 GMail、Yahoo 或 Hotmail 通过 Java 应用程序发送电子邮件? 的相关文章

  • 使用 Java-Large 文件查询 JSON 文件

    我正在尝试使用 java 解析下面的 JSON 文件 我需要能够 按 ID 或名称或对象中的任何字段搜索文件 也在字段中搜索空值 搜索应返回整个对象 该文件将会很大 并且搜索应该仍然很省时 id 1 name Mark Robb last
  • TestNG 启动期间发生内部错误

    我创建了一个 TestNG 类 FirstTest java 当我将测试用例作为 TestNG Test 运行时 出现以下错误 期间发生内部错误 启动 FirstTest java lang NullPointerException Ecl
  • 在游戏框架中编写功能测试的正确方法

    在为基于 play1 2 4 的 web 应用程序编写功能测试时 我对如何正确编码感到有点困惑 困惑在于所涉及的事务边界 我在某处读到每个测试都有自己的事务 在我的应用程序中 用户可以登录并向购物车添加一些商品 然后他可以提供一个地址 以便
  • 逐行读取 JTextPane

    有没有办法读取a的内容JTextPane逐行 很像 BufferedReader 吗 Element root textPane getDocument getDefaultRootElement 获得根元素后 您可以检查存在多少个子元素
  • Spring boot 404错误自定义错误响应ReST

    我正在使用 Spring boot 来托管 REST API 即使浏览器正在访问 URL 以及自定义数据结构 我也希望始终发送 JSON 响应 而不是使用标准错误响应 我可以使用 ControllerAdvice 和 ExceptionHa
  • Java:BufferedInputStream 的 available() 方法存在问题

    我正在处理以下代码 用于将大文件拆分为一组较小的文件 FileInputStream input new FileInputStream this fileToSplit BufferedInputStream iBuff new Buff
  • SimpleDateFormat 无法正确处理 DD

    我正在尝试获得这样的格式 2013 06 15 17 45 我在代码中执行以下操作 Date d new Date SimpleDateFormat ft new SimpleDateFormat YYYY MM DD HH mm Stri
  • java模拟自定义对象

    public class MainClass public void makeCall CustomObject obj new CustomObject obj testMethod 我想进行单元测试makeCall 所以我必须嘲笑Cus
  • IntelliJ 建议错误的 @NotNull 注释

    IntelliJ 建议导入com sun istack internal NotNull以下程序中的 NotNull 注释 这是错误的 public class Test implements Comparable
  • Java中的运算符重载和覆盖

    运算符重载和运算符重写有什么区别 它们在继承和控制台程序中是否相同 Java 不支持运算符重载和重写 检查以下引用自的描述 http java sun com docs white langenv Simple doc2 html http
  • Java Swing JEditorPane:操作样式文档

    我的模型是与枚举类型关联的字符串队列 我试图在 JEditorPane 中显示该模型 队列中的每个元素作为一个单独的 HTML 段落 其属性基于关联的枚举类型 但是 我的更新方法并没有达到我想要的效果 我尝试将 HTML 字符串直接写入文档
  • EasyMock : java.lang.IllegalStateException: 1 个匹配器预期,2 个记录

    我在使用 EasyMock 2 5 2 和 JUnit 4 8 2 通过 Eclipse 运行 时遇到问题 我已阅读此处所有类似的帖子 但尚未找到答案 我有一个包含两个测试的类 它们测试相同的方法 我正在使用匹配器 每个测试单独运行时都会通
  • 在 Java/GWT 中解析用户时间输入

    解析用户在 GWT 中的文本字段中键入的时间的最佳方法是什么 默认时间格式要求用户完全按照区域设置指定的时间格式输入时间 我想要更加灵活 因为用户可以通过多种不同的方式输入时间 例如 8 8p 8pm 8 15pm 13 15 1315 1
  • 无法从 ViewPager 中的 Fragment 编辑 ActionBar 标题

    我有一个Activity它通过一个托管多个片段ViewPager 在活动的onCreate方法我使用以下代码来更改ActionBar title Toolbar toolbar findViewById R id toolbar setSu
  • 不想保留一对一的实体

    假设我有两节课Employee and Department In Employee我已经写了 OneToOne fetch FetchType EAGER cascade CascadeType ALL JoinColumn name d
  • 如何使 RSACryptoServiceProvider 在没有填充(nopadding)的情况下工作?

    我需要使 C 应用程序与 Java 应用程序兼容 Java 应用程序使用Cipher getInstance RSA ECB nopadding 初始化器使密码 ECB 和无填充 但是 在 C 中 您有 2 个填充选项 OAEP 填充或 P
  • 错误:列“this_.phitorsionangle”必须出现在 GROUP BY 子句中或在聚合函数中使用

    我在执行 sql 查询时遇到了一些问题 我正在使用 Hibernate Criteria 来构建查询 我通过按一定间隔 binSize 舍入值然后对它们进行分组来从数据库创建一些容器 当我直接在 SQL 中使用查询尝试时 效果非常好 SEL
  • 从字符串中提取文本 Java

    使用此字符串 ADACADABRA 如何从java中的字符串 ADACADABRA 中提取 CADA 以及如何提取 和 之间的id从下面的链接 http www youtube nocookie com embed zaaU9lJ34c5
  • 飞碟 - html 实体未呈现

    我正在使用 Flying saucer lib 生成 pdf 但我对一些 html 实体有问题 我已经在寻找解决方案 我在这个论坛和其他地方找到了很多提示 但仍然存在问题 我尝试过这种方法 http sdtidbits blogspot c
  • 如何设置 commons-logging 来使用 logback?

    我们使用 slf4j logback 并且碰巧有一些使用 commons logging 的第三方库 如何设置它以使用 logback 答案是不要使用 commons logging jar 因为 SLF4J 的设计目的与 commons

随机推荐

  • Raspberry Pi 无法在 JavaFX 应用程序中隐藏鼠标光标

    目前 我为 Raspberry Pi 3 开发 JavaFX 应用程序 为了在我的 PC 上进行开发 我使用 Ubuntu 16 04 1 OpenJDK 1 8 0 111 和 OpenJFX 8 0 60 对于 Raspberri Pi
  • Oracle 存储过程 OUT 参数

    我有一个存储过程 其 IN OUT 参数声明如下 create or replace PROCEDURE RIFATT SEGN0 INS pIdRifattSegn0 in OUT NUMBER pNumDossier IN VARCHA
  • 如何定义 Swagger 2.0 JSON 来填充 Swagger UI 中的默认主体参数对象?

    我们当前的部署模式要求我手动编写 swagger json 输出 该输出将由我公司使用的基于 Swagger 的 UI 使用 我希望我正在编写的 json 能够提供 默认 值来填充所有输入字段 包括 body 输入参数 的 Swagger
  • 无法通过angularjs在phonegap中显示联系人照片

    我能够从简单的 html 和 javascript 获取并显示联系人照片 但是当我使用 angularjs 模型显示联系人照片时 出现错误 以下是我的源代码 列出我尝试显示联系人的位置 ul class list li class item
  • 如何使用表单从数组动态创建复选框?

    我想使用代码根据传递给函数的数组或对象动态创建复选框 你能修改这个函数来获取数组吗 我有一个脚本 可以根据用户名查找可能的电脑名称并列出匹配项 如果有这个表格 让我能够选择列表中的结果之一作为正确的 PC 以移入正确的容器并安装软件 那就太
  • MySQL 删除重复行

    我有一个评论表 其结构如下 id name email comment 我有很多重复的评论 具有相同的姓名和电子邮件 我需要删除它们 任何人都可以建议我如何使用单个查询来实现此目的 Thanks DELETE FROM comments c
  • 用于在正在运行的 JVM 中打开调试的 Java API [重复]

    这个问题在这里已经有答案了 是否有一种编程方式可以在正在运行的 JVM 实例中打开调试 我正在寻找一个 API 它可以使运行中的 JVM 成为调试服务器 该 API 的作用相当于 Xdebug Xrunjdwp transport dt s
  • 暂停测试执行,直到应用程序空闲

    是否可以实现一些 util 方法来暂停测试 当前线程 执行 直到应用程序空闲 空闲的意思是 1 一段时间内没有GUI事件添加到事件队列中2 在同一时间段内没有工作线程运行任何任务 您能否提供实现 代码片段来跟踪以前的空闲情况 您可以更换Ev
  • 尝试合并 2 个数据帧但出现 ValueError

    这些是我保存在两个变量中的两个数据框 gt print df head gt club name tr jan tr dec year 0 ADO Den Haag 1368 1422 2010 1 ADO Den Haag 1455 14
  • 已删除的数据存储条目重新出现

    我想重新打开已删除的数据存储条目重新出现作为注册用户 老问题可以删除吗 这次我会尽量说得更具体 我遇到以下问题 最初 我将 N 个同类实体放入数据存储中 如下所示 datastore entity MyModel model propert
  • Perl 函数定义中的 $;$ 是什么意思? [复制]

    这个问题在这里已经有答案了 我得到以下代码 sub deg2rad my d DR 0 1 d rad2rad d 谁能告诉我什么 means 子声明后面括号中的内容称为原型 它们的解释在perlsub 一般来说 你can使用它们来限制编译
  • Android 蓝牙:软件导致连接中止

    每当我尝试将 Android 设备连接到支持蓝牙的设备时 我都会遇到异常 它正在连接 并且在一分钟之内就出现异常 要使用 BLuettoth 设备 Spp 配置文件 进行连接 我正在使用 Method m m mmDevice getCla
  • 在Java中将标签设置为图像格式问题

    我正在尝试将 java 程序中的标签设置为图像 然而 它似乎不适用于 bmp 图像 我正在寻找一个转换器 它允许我将图像从 bmp 转换为具有相同文件名的 jpg 这个转换器需要由java程序控制 其中有需要转换的图像的名称和位置 任何帮助
  • 使用 16 位整数的重要性

    开发人员在编写代码时如何认真考虑使用 16 位整数 自从我开始编程以来 我一直在使用 32 位整数 而且我并没有真正考虑过使用 16 位 声明 32 位 int 非常容易 因为它是大多数语言的默认值 使用 16 位整数部分来节省一点内存有什
  • 将Json反序列化为Asp.net中实现Ienumerable的类

    我有下面的函数 它获取 facebook 数据并将其作为字符串返回 public static string GetUserNewsFeed string strAccessToken Dictionary
  • 如何将事件传递给方法?

    我想创建一个方法 将事件作为参数并向其添加 eventHandler 以正确处理它 像这样 我有两个事件 public event EventHandler Click public event EventHandler Click2 现在
  • spring boot application.yml 属性在运行时发生变化

    在 Spring Boot 应用程序中 我可以使用 ConfigurationProperties 注释将 application yml 中的属性绑定到 bean 字段 是否可以在运行时更新 application yml 中的这些属性并
  • 记录 CLR JIT 策略

    我想知道 CLR 适用于 JIT 编译的范围和顺序 例如 如果我的应用程序仅调用给定类的单个方法 那么该类的未使用方法是否会不必要地进行 JIT 编译 如果是的话 它们是在执行我需要的一种方法之前全部编译的 还是在事后延迟编译的 那么方法中
  • Code Golf:找到加权中位数的最短代码?

    我对代码高尔夫的尝试 的问题找到最小值 W i X X i 简化为查找列表的加权中位数x i 有重量w i 定义见下文 你将如何用一个最短 最简单 最漂亮的程序来做到这一点 这是我的代码最初的样子 解释在问题的答案简短版本作为下面的答案之一
  • 如何使用 GMail、Yahoo 或 Hotmail 通过 Java 应用程序发送电子邮件?

    是否可以使用 GMail 帐户从我的 Java 应用程序发送电子邮件 我已经使用 Java 应用程序配置了我公司的邮件服务器来发送电子邮件 但是当我分发应用程序时 这并不会减少它 使用 Hotmail Yahoo 或 GMail 的任何答案