BCCではなくCCでメールを発信してしまう最悪のトラブル。よく、CCの設定欄がなくなればトラブルが起こらないのにと考えたことはありませんか。今回、紹介するRを利用したメールの発信方法ではCCの設定を無効にできるのでトラブルのリスクを減らせると思います。
紹介するコードはGmailを利用していますが、Gmail以外でもSMTPサーバーの設定を利用してメールを発信可能です。
本パッケージは、Gmailで2段認証を設定していても使用可能です。テキストメールだけではなくHTMLメールも送信できます。もちろん、ファイルの添付も可能です。
パッケージバージョンは0.8。実行コマンドはR version 4.2.2で確認しています。
Javaのインストール
パソコン環境によってはJavaのインストールが必要です。自身のOS環境(64bit/32bit)に合わせ、以下よりダウンロードしてください。
javaのダウンロード:https://www.java.com/ja/download/manual.jsp
なお、Javaのインストールが必要ないパッケージもあります。お好みに合わせて利用してはいかがでしょうか。
パッケージのインストール
下記、コマンドを実行してください。
install.packages("mailR")
Gmailで2段認証している場合
- Gmailにアクセスし、右上のアカウント名をクリックし表示されるダイアログのアカウントをクリックする。
- ログインに表示されている「アプリパスワード」をクリックする。
- 下部に表示される「端末を選択」「アプリを選択」でその他を選び適当な名前をつける。
- 設定が済むとパスワードが表示されます。テキストなどにペーストしてください。
メール送信設定のエクセルファイル
画像のような形式のエクセルファイルを用意してください。メールアドレスは宛先に入力してください。セルに一つのアドレスで、縦に入力していきます。

必要なパッケージの読み込み、メール送信設定のエクセルファイルの読み込み、送信元のアドレスを設定
詳しくはコメントを確認してください。
#必要パッケージの読み込み
library("mailR")
library("XLConnect")
library("tcltk")
###メール送信設定のエクセルファイルの読み込み#####
#エクセルファイルを指定
LoadData <- loadWorkbook(paste(as.character(tkgetOpenFile(title = "xlsxファイルを選択",
filetypes = '{"xlsxファイル" {".xlsx"}}',
initialfile = "*.xlsx")), sep = "", collapse =" "))
#sheetオプションで読み込むシートを設定します
SendData <- readWorksheet(LoadData, sheet = 1)
########
#送信元のアドレスを設定
SendFrom <- "メールアドレスを入力"
########
メール送信のコマンド紹介
BCC設定間違い防止のためにCCをコメントアウトしても良いかもしれません。
user.nameには”Gmailのユーザー名”、passwdには”Gmailのパスワード”を入力してください。Gmailで2段認証している場合は上部説明を参考にして、パスワードを取得してください。
テキストメールの送信
send.mail(from = SendFrom,
to = SendData[, 1][!is.na(SendData[, 1])],
cc = SendData[, 2][!is.na(SendData[, 2])],
bcc = SendData[, 3][!is.na(SendData[, 3])],
subject = SendData[, 4][!is.na(SendData[, 4])],
body = SendData[, 5][!is.na(SendData[, 5])],
encoding = "utf-8",
smtp = list(host.name = "smtp.gmail.com", port = 465,
user.name = "Gmailのユーザー名を入力",
passwd = "Gmailのパスワードを入力", ssl = T),
authenticate = TRUE,
send = TRUE)
HTMLメールの送信
send.mail(from = SendFrom,
to = SendData[, 1][!is.na(SendData[, 1])],
cc = SendData[, 2][!is.na(SendData[, 2])],
bcc = SendData[, 3][!is.na(SendData[, 3])],
subject = SendData[, 4][!is.na(SendData[, 4])],
body = paste(as.character(SendData[, 6][!is.na(SendData[, 6])]), sep = "", collapse =" "),
html = TRUE,
inline = TRUE,
encoding = "utf-8",
smtp = list(host.name = "smtp.gmail.com", port = 465,
user.name = "Gmailのユーザー名を入力",
passwd = "Gmailのパスワードを入力", ssl = T),
authenticate = TRUE,
send = TRUE)
少しでも、あなたの解析が楽になりますように!!