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

[复制链接]
51data 发表于 2020-9-29 19:28:58 | 显示全部楼层 |阅读模式
问题:
   在RGui通过source(xx.R)执行R脚本时,发现mailR包的send.mail发出来的邮件中文乱码。
在Rstudio中暂未发现该问题。

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







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

51data

管理员

  • 主题20
  • 帖子20
  • 积分194
发布新帖 立即签到

最新主题

主题排行

快速回复 返回顶部 返回列表