Rで解析:Rからメールを送信!「emayili」パッケージ

Rの解析に役に立つ記事

Rからメールが送信できるパッケージの紹介です。ファイルの添付はもちろん、本文に画像の埋め込みやRmdファイルの添付などが可能です。実行コマンドではGmailアカウント情報を利用してメールを送信する例を紹介します。なお、Gmailに限らずSMTPサーバー情報があれば他のメールサービスも利用可能です。

また、Googleアカウントに二段階認証を設定していても、アカウント設定から「セキュリティ」、「Googleへのログイン」、「アプリ パスワード」に進みパスワードを取得することで利用可能です。

パッケージバージョンは0.7.18。実行コマンドはR version 4.3.1で確認しています。

スポンサーリンク
スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("emayili")

usernameとpasswordを”.Renviron”ファイルに保存して使う

実行コマンドでメール送信に必要はusernameとpasswordは実行コマンドに直接打ち込んでいます。しかし、セキュリティを考えるとあまり望ましくありません。そこで、環境変数を保存する”.Renviron”ファイルを作成するコマンドを紹介します。

###Documentsフォルダに".Renviron"ファイルを作成する#####
# まずは環境変数の確認
Sys.getenv()

# ファイルパスを指定:Documentsフォルダ
doc_renviron <- path.expand("~/.Renviron")

# ".Renviron"ファイルが存在するか確認
if(!file.exists(doc_renviron))
  # 存在しなければ作成
  file.create(doc_renviron)

# ".Renviron"ファイルに書き込み
write_Renviron <- file(doc_renviron, "w" )

# USERNAMEを書き込み
writeLines('GMAIL_USERNAME="HOGEHOGE@gmail.com"', write_Renviron)

# PASSWORDを書き込み
writeLines('GMAIL_PASSWORD="HOGEHOGEHOGEHOGEHOGEHOGE"', write_Renviron)

# ".Renviron"ファイルを閉じる
close(write_Renviron)

# 気になれば".Renviron"ファイル内容を確認
file.edit(doc_renviron)

# Rをrestartして内容を反映
.rs.restartR()

# 最後に環境変数を確認
Sys.getenv()

# 呼び出し例
Sys.getenv("GMAIL_USERNAME")
[1] "HOGEHOGE@gmail.com"
########

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("emayili")

#メールを送る準備,envelopeオブジェクト作成:envelopeコマンド
email <- envelope()

#from,to,ccなどを設定:from,to,cc,bccコマンド
#例ではfromコマンド,toコマンドを使用
email <- email %>%
  from("XXXXXXXX@XXXXXX.XXXXX") %>%
  to("YYYYYYYYY@YYYYYY.YYYYYY")

#メールタイトルを設定:subjectコマンド
email <- email %>%
  subject("TEST:からだにいいもの")

#メール本文を設定:textコマンド
#{{XXXX}}で埋め込みも可能です
text <- "karada-good!!"
email <- email %>%
  text("これはテストです!!
       {{text}}")

#添付ファイルを設定:attachmentコマンド
email <- email %>%
  attachment(paste(as.character(tcltk::tkgetOpenFile(title = "ファイルを選択"),
                                sep = "", collapse ="")))

#Rmdファイルの出力を本文に埋め込む:renderコマンド
#[https://www.karada-good.net/analyticsr/r-228/]のRmdファイル
email <- email %>%
  render(paste(as.character(tcltk::tkgetOpenFile(title = "ファイルを選択"),
                            sep = "", collapse ="")),
         include_css = "rmd")

#本文に画像を埋め込む方法:htmlコマンド,attachmentコマンドを組み合わせる
#cidで設定するのがポイント
html_body <- '<html><body><img src="cid:image" width="600" height="150"></body></html>'
email <- email %>%
  html(html_body) %>%
  attachment(path = paste(as.character(tcltk::tkgetOpenFile(title = "ファイルを選択"),
                                       sep = "", collapse ="")),
             cid = "image")

#gmailアカウントを情報を設定:gmailコマンド
#2段階認証を設定している場合はgoogleアカウントから
#セキュリティーのGoogleへのログイン,アプリパスワードを取得する
#パスワードはログインパスワードではなく、アプリパスワードを設定する
GmailSend <- gmail(username = "XXXXXXXXXX", password = "YYYYYYYYYYYYY")
#作成したGmailSend functionを使用してメールを発信
GmailSend(email, verbose = TRUE)

#他サービスなどを使用する場合の設定方法:serverコマンド
smtp <- server(
  host = "XXXXXXXXXXXX",
  port = XXXXXXX,
  username = "XXXXXXXXXX",
  password = "XXXXXXXXXXXXXXX"
)
smtp(envelopeオブジェクト, verbose = TRUE)

出力例


少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました