如何用R的emayili包回复邮件并获取发送邮件的Message ID?
关于emayili包回复邮件的问题解答
一、inreplyto() 和 references() 的区别
inreplyto():用来指定你直接回复的那封邮件的Message ID,作用是告诉邮件客户端,这封邮件是对某一封特定邮件的直接回应,会让它关联到原邮件的对话线程中。references():用于构建完整的邮件对话链,通常需要填入当前回复序列里所有历史邮件的Message ID(包括直接回复的那封,以及更早的祖先邮件),帮助邮件客户端梳理整个对话的来龙去脉。
简单总结:inreplyto指向直接父邮件,references是整个对话的ID序列集合。
二、如何获取Message ID
1. 从已收到/已发送邮件中提取
如果是回复收件箱里的邮件,需要从邮件的原始头部信息里找Message-ID字段:
- Gmail:打开目标邮件,点右上角「更多」→「显示原始邮件」,在内容里找
Message-ID: <xxx@xxx.com>,尖括号包裹的内容就是msgid。 - 其他邮件客户端:一般在「邮件属性」或「查看原始内容」选项里能找到这个字段。
2. emayili发送邮件时是否返回Message ID
默认情况下,smtp()函数发送邮件后不会直接返回Message ID——因为这个ID大多是由邮件服务器(比如Gmail)生成并添加到邮件头部的,并非emayili本地生成。
如果需要获取自己发送邮件的msgid,有两种方式:
- 方式一:发送后去自己的「已发送」文件夹找到对应邮件,按上面的方法提取其Message ID。
- 方式二:手动自定义Message ID。在构建邮件时用
header()函数指定Message-ID,这样就能提前知道msgid,示例代码如下:
message_content <- envelope( to = "Reciever@gmail.com" %>% address(display = "MR. Reciever"), from = "Sender@gmail.com" %>% address(display = "MR. Sender"), subject = "email_subject", importance = "high", priority = "urgent" ) %>% return_path("Sender@gmail.com" %>% address(display = "MR. Sender")) %>% # 手动设置符合邮件标准的Message ID,格式一般为<唯一标识@域名> header("Message-ID", "<my-custom-msg-1234@gmail.com>") # 发送后,这个自定义的字符串就是该邮件的msgid smtp(message_content, verbose = F)
三、回复邮件的完整示例代码
假设已经获取到原邮件的msgid为<original-msg-id@example.com>,回复代码如下:
# 原邮件的Message ID original_msgid <- "<original-msg-id@example.com>" # 构建回复邮件 reply_content <- envelope( to = "Reciever@gmail.com" %>% address(display = "MR. Reciever"), from = "Sender@gmail.com" %>% address(display = "MR. Sender"), subject = "Re: email_subject" # 回复主题通常添加Re:前缀 ) %>% inreplyto(original_msgid) %>% # 指定直接回复的原邮件ID references(original_msgid) %>% # 若有更早的对话ID,可用空格分隔添加 text("Hello! This is my reply.") # 发送回复邮件 smtp(reply_content, verbose = F)
内容的提问来源于stack exchange,提问作者a.sa.5969
相关产品推荐
相关产品推荐

