はじめに
Rを使ってメールを一斉送信する方法を紹介します。
宛先リストをもとに、
ーー
〇〇 太郎 様
〇〇のお知らせをいたします。
本文
署名
ーー
のように、相手の氏名が入ったメールを一斉に送信します。
送信プログラム
library(tidyverse)
library(readxl)
library(emayili)
# 送信サーバの設定 gmailの例
smtp <- server(
host = "smtp.gmail.com",
port = 587,
username = "xxxxxxxx@gmail.com", # 下記のfrom(発信者のメールアドレス)と対応させる
password = "xxxxxxxx" # パスワード
# gmailの場合はアプリパスワード(空白を取り除いた16桁)
)
# 送信メッセージ
# {name}に相手の氏名が入る
message <- "{name} 様
〇〇のお知らせをいたします。
本文
署名
"
# メール宛先.xlsxファイルの2行目から氏名とメールアドレスを読み込む
# excelファイルを読み込んで,列の名前をプログラム内部で利用しやすいようにnameとaddressに変更
address_data <- read_excel("メール宛先.xlsx", col_names=T) %>% select(name=1, address=2)
# 1通ずつ送信
for(i in 1:nrow(address_data)){
name = address_data[i,]$name
address = address_data[i,]$address
email <- envelope(
from = "発信者名<xxxxxxxx@gmail.com>", # 発信者名を入れておくと相手側に表示される
to = str_glue("{name}:<{address}>"), # 送信先の氏名とメールアドレスが設定される
subject = "〇〇のお知らせ", # 題名
text = str_glue(message)
)
# email <- email %>% attachment("xxx.jpg") # 添付ファイルがあるときは先頭の#を取り除く
smtp(email, verbose = T) # 送信
}
「送信サーバの設定」部分は、メール送信で使っている設定に書き換えてください。
二段階認証を導入しているプロバイダではパスワードをそのまま入れてもエラーになことがありますので、プロバイダの説明に従ってください。Gmailの場合はアプリパスワードを使います。
ファイルは文字コードUTF-8で保存してください。(ここでは「メール送信.R」)
パスワードをプログラム中に書きたくない場合
password = "xxxxxxxx" # パスワード
を
password = Sys.getenv("MAIL_PASSWORD")
に書き換えて
ファイル(~/.Renviron)に
MAIL_PASSWORD="xxxxxxxx"
を追加。(ファイルがなければ新しく作る)
宛先リスト
表計算ソフトで宛先ファイル(ここでは「メール宛先.xlsx」)を作成
| 氏名 | メールアドレス |
|---|---|
| 〇〇 太郎 | yyyyy@yyy.com |
| △△ 花子 | zzzzz@zzz.com |
2行目から氏名とメールアドレスを記入
RStudioも一緒にインストールしておくと何かと便利です。
初めてRStudioを使う方へ
上の2つのファイルを同じフォルダに入れて、「メール送信.R」をダブルクリックすると、RStudioが起動してプログラムが表示されます。
メールアドレスやメッセージなど送信情報を書き換えて保存、

(1) 必要なライブラリをインストール
(2) プログラムの実行を開始
送信内容を事前に確認したときは
smtp(email, verbose = T)
行にブレークポイントを設定し(RStudioで左に表示される行番号をクリックすると赤丸が表示される)、プログラムを実行するとそこで停止します。
Consoleウインドウ(RStudio画面の左下)に
email 改行
email$parts[[1]]$content 改行
で送信される情報が表示されます。
c改行 かContinueボタンで実行が再開されます。
送信結果の確認
gmailの場合はwebで「送信済み」を確認できました。webメール機能のあるプロバイダでは同様のことができる可能性があります。
使用したソフトウエア
R version 4.5.2
RStudio version 2026.01.0+392
macOS 14.8.3
Windows 11