Gmail 作为 JavaMail SMTP 服务器

2024-01-09

我一直在使用 JavaMail API(以 Gmail 作为我的主机),并对如何使用它发送电子邮件有一个大致的了解。但有两行代码仍然让我困惑。

message.setFrom(new InternetAddress(USERNAME));

API 表示,这用于“设置此消息中的“From”属性”。但是,当我从代码中删除此行并发送电子邮件时,与该行存在时相比,电子邮件没有明显的变化。我认为 Gmail 这样做是为了防止垃圾邮件,这让我想知道在使用 Gmail 作为主机时是否有必要这样做。

这也给我带来了麻烦。

props.put("mail.smtp.auth", "true");

根据我收集的信息,这表明主机是否需要身份验证,而 Gmail 需要身份验证。然而,将其设置为 false 似乎没有任何作用,并且消息以与设置为 true 相同的方式和时间发送。为什么会这样呢?

谢谢你的帮助。如果有帮助的话,这是我的全部代码。

import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import java.util.Properties;
public class SendEmail
{
    private String msg;
    private String className;
    private final String USERNAME = "[email protected] /cdn-cgi/l/email-protection";
    private final String PASSWORD = "password";
    private final String HOST = "smtp.gmail.com";
    public SendEmail(String email, String text, String title)
    {
        String to = email;
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", HOST);
        props.put("mail.smtp.port", "587");
        Session session = Session.getInstance(props, null);
        try
        {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(USERNAME));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            message.setSubject(title);
            message.setText(text);

            Transport.send(message, USERNAME, PASSWORD);
            msg = "Email Successfully Sent";
        }
        catch(Exception ex)
        {
            msg = ex.getClass().getName();
        }
    }
}

首先,

message.setFrom(new InternetAddress(USERNAME));

正在使用RFC 5321 - 第 3.3 节邮件交易 https://www.rfc-editor.org/rfc/rfc5321#section-3.3 MAIL命令(其中包括FROM)。同样,mail.smtp.auth似乎是可选的

props.put("mail.smtp.auth", "true");`

因为该库假设您想使用mail.smtp.auth当你指定一个USERNAME and PASSWORD at

Transport.send(message, USERNAME, PASSWORD);

the Transport.send(Message, String, String) Javadoc https://javamail.java.net/nonav/docs/api/javax/mail/Transport.html#send(javax.mail.Message,%20java.lang.String,%20java.lang.String)说(部分)

使用指定的用户名和密码向邮件服务器进行身份验证。

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

Gmail 作为 JavaMail SMTP 服务器 的相关文章

随机推荐

  • 使用 PIL 修剪扫描图像?

    修剪使用扫描仪输入的图像并因此具有较大的白色 黑色区域的方法是什么 熵解似乎有问题并且计算过于密集 为什么不进行边缘检测 我刚刚编写了这段 python 代码来为自己解决同样的问题 我的背景是肮脏的白色 所以我使用的标准是黑暗和颜色 我简化
  • QApplication exec() 创建新线程/进程?

    在 QApplication 中 如果我们调用 exec 那么是否会启动一个新进程 线程 不 根据文档 https doc qt io qt 6 qapplication html exec 呼叫exec will 进入主事件循环并等待 直
  • 沿隐含曲线对地理不连续线段进行排序

    Given 一个集合 为了讨论的目的 我们将其称为S 这是一个无序的线段的集合 您可以使用k d tree http en wikipedia org wiki K d tree or a 覆盖树 http en wikipedia org
  • ansicon -i 不工作。 ansicon 未被识别为内部或外部命令

    厌倦了在命令提示符下查看黑白错误 RSpec 消息 我决定关注这个帖子http softkube com blog ansi command line colors under windows http softkube com blog
  • 将 googlecode 密码包含在 .git/config 中是否危险?

    因为我的 netrc 文件的技巧不起作用 即使它具有正确的文件权限 所以我将本地 git config 修改为如下所示 remote origin fetch refs heads refs remotes origin url https
  • 无法将 Eclipse 中的 crashlytics 与 ADT 集成

    我按照设置插件来集成crashlytics从这个链接https www crashlytics com onboard https www crashlytics com onboard 从 Eclipse 中 我登录到我的 Fabric
  • lua -> 如何将这些参数修改为const,或者我应该做什么?

    all 我来到这里是因为有一个问题困扰我很长一段时间了 我使用love2d引擎作为lua脚本的 图形 补充 但这个问题是lua类型的 至少我相信 我有一个功能 createNew keepOld function oldImgData ol
  • 带有 UIActivityIndi​​catorView 的活动指示器(旋转器)

    我有一个加载 XML feed 的 tableView 如下所示 void viewDidAppear BOOL animated super viewDidAppear animated if stories count 0 NSStri
  • 是否可以在 VBA 中创建和使用 Microsoft Edge 变量/对象?

    我有一些 VBA 代码可以从网上获取股票价格 我的代码使用 InternetExplorer 对象 文档来执行此操作 但是 如果可能的话 我想改用 Microsoft Edge 对象 文档 在我当前的代码中 我初始化一个 InternetE
  • 访问 Outlook Exchange 全球地址簿

    我正在构建一个 csharp 应用程序 我想要一个包含我的所有用户的下拉列表Outlook 全球地址簿 当我从 Outlook gui 单击 收件人 时也是如此 是否可以获取此程序 这里的安全要求是什么 过去 除了 Outlook 依赖性之
  • 调整 3D 图像大小(并重新采样)

    我有大脑的 3D 图像 我们称之为 flash 当前尺寸为 263 x 256 x 185 我想将其大小调整为另一个图像的大小 称之为 Whole brain bravo 256 x 256 x 176 并且 希望 使用 lanczos 插
  • Github Actions 徽章显示“无状态”

    GitHub Actions 徽章出现问题 我有三个工作流程 https github com riZZZhik belinsky tree master github workflows在我的存储库中 我正在努力让他们的徽章进来Readm
  • 将日期格式更改为 yyyy-mm-dd

    我有一个日期列 其中包含混合格式的日期 例如 A 1990年3月21日1990年3月21日 因此 基本上一列中有两种不同的格式 dd mm yyyy and mm dd yyyy 我正在尝试编写一个 VBA 脚本来将列中所有日期的格式更改为
  • 带有 JSON 补丁的 GraphQL 突变

    GraphQL 中是否有任何数据类型可用于描述 JSON Patch 操作 JSON Patch 操作的结构如下 op add replace remove path hello value world Where value可以是任何有效
  • 如何在没有 Grails 的情况下创建 GSP 标记库

    我们可以在没有 Grails 的情况下使用 GSP 只需映射 servletgroovy servlet TemplateServlet 那么 TagLib 又如何呢 Here are http grails org doc latest
  • 从 Google 云端硬盘下载图像文件

    我正在将图像文件上传到 Google Drive SDK 然后尝试下载回相同的图像 我查看了 Google Drive Developer 示例中下载文件的示例 但它们仅向我们展示了如何从文件中下载文本 我该如何下载图像 该文件是 Goog
  • htmlpurifier 删除内联 css

    我正在使用 htmlpurifier 来清理用户内容 我正在尝试删除内联样式属性 例如 div some text div 我想删除整个样式属性 如何使用 htmlpurifier 做到这一点 您可以调整允许的属性 http htmlpur
  • 用于删除所有用户桌面上的所有图标的批处理脚本

    目前正在寻找一种方法来删除所有用户桌面上的所有图标 我一直在尝试 直到我制作了以下脚本 该脚本允许我从单个用户中删除所有内容 但如果没有硬编码 我将无法扩展它以覆盖单个 PC 上的所有用户 echo off cd del C Users U
  • 通过启动进程运行 cmd.exe 但无法将命令传递给 cmd.exe

    我想运行一个常规脚本cmd exe在不同的用户下 我用过Start Process 当脚本执行时 它只是用不同的用户在屏幕上打开提示 但不处理 command 所以我的问题是 运行后如何传递命令cmd exe使用 PowerShell 这是
  • Gmail 作为 JavaMail SMTP 服务器

    我一直在使用 JavaMail API 以 Gmail 作为我的主机 并对如何使用它发送电子邮件有一个大致的了解 但有两行代码仍然让我困惑 message setFrom new InternetAddress USERNAME API 表