51data 发表于 2020-9-29 19:28:58

R语言mailR包发送邮件中文乱码

问题:
   在RGui通过source(xx.R)执行R脚本时,发现mailR包的send.mail发出来的邮件中文乱码。
在Rstudio中暂未发现该问题。

脚本如下:library(mailR)
recipients <- c('zx@qq.com,lsy@qq.com,zy@qq.com')   # 收件人
cc<-c('xk@qq.com')
sender = 'data@qq.com'# 发件人
title =paste('【自动邮件】XXX',substring(as.Date(paste(substring(Sys.Date(),1,8),'01',sep=''))-1,1,7),sep='')# 主题
body = paste(substring(as.Date(paste(substring(Sys.Date(),1,8),'01',sep=''))-1,1,7),
             'XXX爬取完成,见附件。\r',
             '数据为程序自动抓取,请抽样验证后使用。\r',
             '数据中有“缺失”、“0”、“NaN”的情况,使用时请注意。',
             sep='') # 正文


问题分析:中文编码引起的
详见github:https://github.com/rpremraj/mailR/issues/51#start-of-content

解决办法1:如果是windows环境下编写的R语言脚本,且在windows环境下执行,那把R语言脚本保存成ANSI编码格式的即可。
解决办法2:将title和body都先写入一个文件,然后指定UTF-8的编码格式读取该文件作为内容即可。
如果写成txt文件,可以用read.table;如果写成html文件,可用readLines。注意:写成txt文件时,内容末尾要再按一下回车键另起一行,这样read.table才可以通过回车键识别到一行完整数据。
title =paste0(read.table('E:/auto_run/auto_run_lj_1_title.txt',header = FALSE,encoding = 'UTF-8'),collapse = NULL)# 主题   
body = paste0(read.table('E:/auto_run/auto_run_lj_1_body.txt',header = FALSE,encoding = 'UTF-8'),collapse = NULL) # 正文







页: [1]
查看完整版本: R语言mailR包发送邮件中文乱码