R语言自动发送邮件
今天分享一个小技巧,用R语言脚本实现STMP邮件自动发送功能。
生信分析实际操作过程中,可能会偶尔会遇到耗时比较久的计算,比如基因组上游分析GATK标准流程往往耗时几天时间。
使用R语言自动发送邮件,在关键节点及时提醒计算状态,能尽可能的避免浪费时间和无效等待,再也不用加班看结果了,系统自动将运算得到的结果汇报至邮箱(文字、表格、图片等文件都支持)。
使用方法
首先,需要安装Rstudio(windows和linux版都支持),然后安装下面的R包,这步骤没有报错说明环境部署完成。
library(keyring) library(blastula) library(rmarkdown)
blastula包是Rstudio新出的发送邮件R包,不需要依赖java环境,相对用起来更方便,而且支持和Rmarkdown联动,实现精美的邮件界面优化。
设置STMP服务器
本次示例使用163邮箱(其他的qq邮箱、outlook等都可以,只要支持STMP即可),先登录邮箱后台。
点击设置,开启STMP,并生成一个随机授权码(一串乱七八糟的字符,复制保存下来)。
然后,进入Rstuio,运行以下代码:
# 创建许可证 create_smtp_creds_key( id = "Bionote", # 账号id user = "bionote@163.com", #邮箱账号 host = "smtp.163.com", # 这个是163的STMP服务器 port = 25, # 端口,如果其他服务器需要百度查一下对应端口 use_ssl = T # ssl加密 # overwrite = TRUE # 首次设置不用,修改时需要加上这个参数 )
系统会弹出一个输入密码的窗口,如果是首次使用,可能最开始会出现一个设置主密码(有点像锁屏密码),然后会出现下面的界面,需要输入STMP服务器密码,将之前那一长串乱七八糟的字符粘贴到此处即可。
创建邮件内容
需要创建一个data.Rmd
文件(Rmarkdown),然后根据这个文件生成email页面。
这个文件内的信息可以根据实际情况进行修改,支持各种变量自动替换。
如果需要邮件中添加附件,可以将文件放在当前目录下,图片或文字形式都可以。
发送邮件
通过以下代码生成基本的发送参数,包括收件人、主题、附件、正文。
subject = "【系统提示】差异表达矩阵计算完成" #邮件主题 attachment = "test.txt" # 如果有附件,在这里填写文件名 body = "data.Rmd" # 这个Rmd文件渲染后就是邮件的正文 # 定义用户(发件人邮箱) from = "bionote@163.com" to = "youraccount@qq.com"
然后,调用以下命令,实现邮件的发送。
# 渲染邮件内容并添加附件,可能有附件也可能没有附件 if (attachment == "") { render_email(body) -> email } else { render_email(body) %>% add_attachment(file = attachment) -> email } # 发送邮件 smtp_send( from = from, to = to, subject = enc2utf8(subject), # 处理中文主题乱码问题 email = email, credentials = creds_key(id = "Bionote") # 这个id需要和之前一致 )
此时,如果正常的话,手机上就会弹出一条通知。以上只是一个简单的示例,还有其他用法,比如通过表格循环群发给不同收件人、根据不同用户自动填充修改文件内容、根据任务运行状态更新邮件等等。