Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言-邮件发送

R语言-邮件发送

原创
作者头像
十维农场主
发布于 2023-05-20 16:23:56
发布于 2023-05-20 16:23:56
70705
代码可运行
举报
运行总次数:5
代码可运行

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

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

  • 方法一(官方示例,适应于gmail, outlook, office365这三种邮箱):
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue 基于vue-codemirror实现的代码编辑器
element-ui 2.13.1 (使用到element-ui message组件,提示错误消息,如果不想安装该组件,替换编辑器中的this.$message所在行函数代码即可)
授客
2020/07/15
11.2K1
Vue 基于vue-codemirror实现的代码编辑器
Vue(27)vue-codemirror实现在线代码编译器 _
如果我们想在Web端实现在线代码编译的效果,那么需要使用组件vue-codemirror,他是将CodeMirror进行了再次封装
落寞的鱼丶
2022/02/28
4K0
CodeMirror入门教程
CodeMirror(下面简称为cm)是一款基于JavaScript、面向语言的前端代码编辑器。它支持开箱即用,自带了超过100种语言的库,同时还有很多附加功能,目前得到了jetbrains等公司的支持。在这个分类下,能够与cm并驾齐驱的另一个编辑器则是ACE。由于笔者并没有使用过ACE,因此就不对两者做对比了。接下来笔者会分几个章节来具体介绍介绍cm的基本使用方法和高级功能。
zhangheng
2020/12/15
10.5K1
CodeMirror入门教程
kkFileView在线文件预览项目学习&搭建
在偶然的翻阅大佬博客的时候,发现一个挺有意思的项目:kkFileView,在线文件预览项目
不愿意做鱼的小鲸鱼
2022/09/26
6.1K0
kkFileView在线文件预览项目学习&搭建
基于vue-office实现docx、xlsx、pdf文件的在线预览
在做项目的时候会遇到docx、xlsx、pdf等文件的在线预览需求,实现此需求可以有多种解决方式,本文基于vue-office实现纯前端的文件预览。
牛老师讲GIS
2024/05/24
8K2
基于vue-office实现docx、xlsx、pdf文件的在线预览
50 个让你高效编程的前端轮子,真香
https://segmentfault.com/a/1190000038589634
@超人
2021/04/26
7.9K0
前端【vue】实现文档在线预览功能,在线预览pdf、word、xls、ppt等office文件
XDOC可以实现预览以DataURI表示的DOC文档,此外XDOC还可以实现文本、带参数文本、html文本、json文本、公文等在线预览,具体实现方法请看官方文档下面这种方式可以实现快速预览word但是对文件使用的编辑器可能会有一些限制
江一铭
2022/06/17
25.1K2
前端【vue】实现文档在线预览功能,在线预览pdf、word、xls、ppt等office文件
站在巨人的肩膀上--用VUE3试试搞个在线IDE吧!
然,生那受苦的命,闲不住啊,领下军令状,重构单位单位的组件库使用的在线代码编辑IDE
用户7413032
2022/08/30
1.6K0
基于 React + Webpack 的音乐相册项目(下)
笔记仓库:https://github.com/nnngu/LearningNotes
nnngu
2018/02/09
1.1K0
基于 React + Webpack 的音乐相册项目(下)
基于v-md-editor的在线文档编辑实现
前面的文章讲到了基于语雀的在线文档编辑器的实现,在本文,将基于v-md-editor实现在线文档的编辑。
牛老师讲GIS
2023/09/10
2K0
基于v-md-editor的在线文档编辑实现
基于video.js来实现vue的视频播放功能
video.js是一个很好的视频播放插件,但是如果移植到vue上相信很多小伙伴很苦恼,是不是网上搜了一堆,发现不好使,我也是踩坑了,后来发现官方文档上就有,好尴尬,建议以后学习先看看官方文档,会有惊喜的。 1.首先安装video.js,然后在main.js中引入
李维亮
2021/07/08
15K0
移动端自动播放视频
TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。是一种视频格式,一般用于实时流媒体和广播电视领域。
程序员不务正业
2021/03/03
2K0
VUE实现一个购物车
想象每个组件都分别为家中的成员:爸爸、妈妈、孩子们。但是,作为一个家庭,他们需要共享状态。在这个家庭中,充当看家狗的Vuex就是来帮助我们解决问题的。
HelloWorldZ
2024/03/20
2120
VUE实现一个购物车
浏览器在线预览offce,vue-pdf预览pdf文件
在office官方自带的链接后添加自己的文档链接,浏览器就可以自动解析预览 支持 word 、ppt、excel,不支持pdf格式文件
明知山
2020/09/03
5.3K0
编辑器中SQL关键字提示
官方 https://github.com/surmon-china/vue-codemirror/tree/v4.0.1
码客说
2023/09/22
4380
编辑器中SQL关键字提示
9个Vue开发技巧助力成为更好的工程师
原文链接:https://juejin.im/post/5e8a9b1ae51d45470720bdfa
歪马
2020/04/16
4.2K0
Vue之设置视频为背景图
前排提示:这个是基于vue的 添加依赖 找到项目的package.json文件在dependencies中加入依赖 json "vue-video": "^0.1.7", "vue-video-player": "^5.0.2", "video.js": "^7.10.2", "videojs-contrib-hls": "^5.15.0", 效果如下: json "dependencies": { "axios": "0.18.0", "echarts": "^4.1.0", "elemen
shaoshaossm
2023/02/03
2.2K0
vue-pdf实现pdf预览、分页、下载、打印
https://www.npmjs.com/package/vue-pdf-app
圆圆的冬瓜
2021/08/18
26.1K2
vue-pdf实现pdf预览、分页、下载、打印
基于 vite2 + Vue3 写一个在线帮助文档工具
VuePress 是“静态网站生成器”,需要我们自行编写文档,然后交给VuePress变成网站,VuePress 并没有提供编写环境,我知道有很多编写 Markdown 的方式,但是我还是喜欢编写、浏览合为“一体”的方式。
用户1174620
2022/05/09
1.4K0
Vue常用指令02-v-on/v-bind/v-model/自定义指令【1小时掌握vue3系列】
Hello,大家好!我是方才,前面已经学习条件渲染和列表渲染的指令,今天我们一口气把剩下的内容搞定。包括监听事件v-on、动态绑定v-bind、双向绑定v-model以及不常用的指令和自定义指令。
方才编程_公众号同名
2024/11/18
2350
Vue常用指令02-v-on/v-bind/v-model/自定义指令【1小时掌握vue3系列】
推荐阅读
相关推荐
Vue 基于vue-codemirror实现的代码编辑器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验