前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言-邮件发送

R语言-邮件发送

原创
作者头像
十维农场主
发布2023-05-21 00:23:56
5710
发布2023-05-21 00:23:56
举报

无意间发现一个好玩的R包(blastula),R也可以用来自动发送邮件,之前都是用python。这样用R处理一些事情后日志就可以直接通过R发送。

1. 设置账号密钥(部分邮箱可以直接用密码,如hotmail等),运行create_smtp_creds_key()会弹出一个密钥/密码输入框,输入即可。

  • 方法一(官方示例,适应于gmail, outlook, office365这三种邮箱):
代码语言:javascript
复制
library(keyring)
library(blastula)
# 创建许可证[运行一次即可]
# -------------------------------------
create_smtp_creds_key(
  id = "outlook",     # 这个id可以设置为任意,但是要记住,发件时需要用到,用来区分用户
  user = "xx@hotmail.com",  # 这里填入你的邮件地址
  provider = "outlook"  # gmail, outlook, office365 三选一,这三种邮箱可以设置,否认不要设置此参数
)
view_credential_keys()
  • 方法二(任意支持smtp的邮箱,smtp服务地址和端口见各大邮箱设置):
代码语言:javascript
复制
library(keyring)
library(blastula)
# 创建许可证[运行一次即可]
# -------------------------------------
create_smtp_creds_key(
  id = "张三",                                 # 以某支持smtp服务的邮箱为例。
  user = "xxxx@zz.com",              # 这里填入你的邮件地址
  host = "smtp.exmail.qq.com",   # stmp服务地址
  port = 465,                                # 端口
  use_ssl = TRUE,                         #  端口是否加密
  overwrite = T                            # 是否覆盖设置(如果密码错误,需要将这个设置为T覆盖错误的配置)
)
view_credential_keys()

2. 另外新建一个文件存储下面的脚本(如 sendMail.R)

  • 此脚本已经设置好命令行参数(不会使用的见链接),直接保存运行Rscript sendMail.R -h查看帮助后直接终端运行即可
代码语言:javascript
复制
suppressWarnings({
  library(optparse) 
  library(keyring)
  library(blastula)
})

option_list <- list(
  make_option("--from", type = "character", default = "xxx@hotmail.com",
              action = "store", help = "发件箱, 默认为xxx@hotmail.com"
  ),
  make_option("--id", type = "character", default = "outlook",
              action = "store", help = "id, 与发件箱对应的存储密钥id,默认为outlook"
  ),
  make_option("--to", type = "character", default = NULL,
              action = "store", help = "收件箱"
  ), 
  make_option("--subject", type = "character", default = "无主题",
                 action = "store", help = "主题,默认:无主题"
  ), 
  make_option("--body", type = "character", default = NULL,
                 action = "store", help = "Rmd正文路径,如不设此参数,则需设置mail参数"
  ), 
  make_option("--mail", type = "character", default = NULL,
                   action = "store", help = "正文内容,支持md,不能同时body和mail都设置 "
  ), 
  make_option("--add", type = "character", default = "",
                 action = "store", help = "附件文件路径,包括后缀"
  ),
  # 设置模式
  make_option(c("-v", "--view"), type = "logical", default = FALSE,
              action = "store_true", help = "查看邮件id、密码信息, 仅使用-v参数时可以查看密钥id"
  )
)

# 解析参数
opt = parse_args(OptionParser(option_list = option_list, 
                              usage = "邮件发送",
                              description = "格式: Rscript %prog [options]\n"))

# 仅有一个view参数时:
if (isTRUE(opt$view)) {
  v_id.df <- view_credential_keys()
  print(v_id.df)
  stop("ID信息如上所示", call. = FALSE)
}

# body和mail同时缺失或同时存在时:
if( is.null(opt$body) & is.null(opt$mail)) { stop({ 
  cat("Error:\n参数body和mail不能同时设置或同时缺失\n\t邮件内容要么放在Rmd文件中要么写在mail参数中") 
}) }
if( !is.null(opt$body) & !is.null(opt$mail)) { stop({ 
  cat("Error:\n参数body和mail不能同时设置或同时缺失\n\t邮件内容要么放在Rmd文件中要么写在mail参数中") 
}) }


# main:
# 定义邮件要素
from = opt$from 
id = opt$id            # id为创建许可证时设置的与密钥相关联的id,view_credential_keys()可查看。
to = opt$to               
subject = opt$subject   
body = opt$body
mail = opt$mail
attachment = opt$add   #"path/to/附件" 必须包含后缀, 如果没有附件,引号内留空即可。 #参数


# 渲染
if (is.null(body)) {
  email <- compose_email(
    body = md(
      mail
      )
  )
} else {
  # 渲染Rmd
  if (attachment == "") {
    email <- render_email(body)
  } else {
    email <- render_email(body) %>% 
      add_attachment(file = attachment)
  }
}

# 发送邮件
smtp_send(
  from = from,
  to = to,
  subject = subject,  # 可用enc2utf8()处理中文主题乱码问题, 检验是否为Encoding(subject) 
  email = email,
  credentials = creds_key(id = id) 
)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 设置账号和密钥(部分邮箱可以直接用密码,如hotmail等),运行create_smtp_creds_key()会弹出一个密钥/密码输入框,输入即可。
  • 2. 另外新建一个文件存储下面的脚本(如 sendMail.R)
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档