見出し画像

プログラミング初心者歓迎!メール送信を自動化しよう!

みなさん、こんにちは!

ゆうき@琵琶湖エンジニア(@RubyPHP2)です!

初めに、簡単に自己紹介をさせてください。

・現役Webエンジニア
・実務経験1年3ヶ月
・twitterで情報発信中
・フォロワー1000人

仕事でコード書きながら、情報発信、オリジナルアプリ作成など、主にプログラミングに関わることを色々やっている者です笑

今回の記事のテーマはメール送信の自動化です!

プログラミング言語にはPHPを用います。

いかにもプログラマーっぽい内容です笑

毎日の面倒なメール送信を自動化して、業務を効率化することが目的です。

実際、私の仕事ではテレワークが普及したことで、出社時にメールを送信する必要があり非常に面倒でした。

これを自動化することで業務効率化に成功したというわけです。

私は非効率なことを効率化することがプログラマーのするべきことだと考えています。

今回の記事では業務を効率化するということを実際に体験していただきます。

注意:メールにはGmailを用います。Googleアカウントのみご用意ください

また、OSはmacを想定しています。

では、さっそく始めていきましょう!


1. composerのインストール

composerとはPHPのパッケージ管理システムのことです。

簡単に言うとcomposerコマンド一発で必要なパッケージを全てインストールしてくれる優れものです。

PHPで開発を行うときは頻繁に登場するものなので覚えておきましょう。

composerをインストールする前にOpenSSLをインストールする必要があります。

OpenSSLはHomebrewを使ってインストールします。

Homebrewを使ってインストールするためには、Homebrewがインストールされていること、XCodeがインストールされていることが必須になります。

Homebrewを既にインストール済みかどうかは以下のコマンドで確認します。

********* は個人情報を含むためマスクしています。

ご了承ください。

# 現在のディレクトリを確認
$ pwd
/Users/*********

# Homebrewのバージョン確認
$ brew -v
Homebrew 2.4.9

Homebrewのバージョンが確認できれば、インストール済みです。

Homebrewを既にインストールされている場合はXCodeのインストール、Homebrewのインストールは不要です。

Homebrewのインストールがまだという方のために、本記事ではXCodeのインストールから紹介していきます。

XcodeのインストールはAppStoreから行ってください。

スクリーンショット 2020-08-16 14.36.48

既にXcodeがインストール済みなら不要です。

次にHomebrewをインストールしていきます。

Homebrewのインストールコマンドは公式サイトのものを使用します。

Homebrew公式サイト

# 現在のディレクトリを確認
$ pwd
/Users/*********

# Homebrewインストール
# コピペしないでください。公式のコマンドを実行してください
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

# 以下の文言が表示されれば、Enterを押してください
==> The Xcode Command Line Tools will be installed.

Press RETURN to continue or any other key to abort

# パスワードの入力が求められれば、ご自身で使用されているmacのパスワードを入力してください。
Password:

エラーなくインストールに成功すればOKです。

Homebrewがインストールされているか確認しましょう。

# 現在のディレクトリを確認
$ pwd
/Users/*********

​# Homebrewのバージョン確認
$ brew -v
Homebrew 2.4.9

バージョンが確認できればOKです。

これでHomebrewのインストールが終了しました。

これでHomebrewを使ってOpenSSLをインストールする準備が整いました。

OpenSSLも既にインストール済みであればインストールの必要はありません。

以下のコマンドでインストール済みか確認します。

# 現在のディレクトリを確認
$ pwd
/Users/*********

# OpenSSLのバージョンを確認
$ openssl version
LibreSSL 2.6.5

このようにバージョンが確認できれば既にopenSSLがインストールされています。

バージョンが確認されなかった場合のみ、OpenSSLのインストールを行なってください。

# 現在のディレクトリを確認
$ pwd
/Users/*********

# OpenSSLをインストール
brew install openssl

念の為、OpenSSLのバージョンを確認しておきましょう。

# 現在のディレクトリを確認
$ pwd
/Users/*********

# OpenSSLのバージョンを確認
$ openssl version
LibreSSL 2.6.5

バージョンが確認されればOKです。

ようやくcomposerをインストールしていきます。

composerをインストールするコマンドは公式サイトのものを使用します。

公式Download Composerページ

# 現在のディレクトリを確認
$ pwd
/Users/*********

# composerのインストール
# コピペしないでください。公式のコマンドを実行してください
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '572cb359b56ad9ae52f9c23d29d4b19a040af10d6635642e646a7caa7b96de717ce683bd797a92ce99e5929cc51e7d5f') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

composerのインストールコマンドを実行するとパスワードを求められることがあるので、その場合はご自身で使用されているPCのパスワードを入力してください。

全てのコマンドを実行するとcomposer.pharというファイルが生成されています。

# 現在のディレクトリを確認
$ pwd
/Users/*********

$ ls
...
...
composer.phar

このcomposer.pharがcomposerコマンドの本体になります。

次にどのディレクトリからでもcomposerコマンドが使えるようにパスを通していきます。

# 現在のディレクトリを確認
$ pwd
/Users/*********

# パスを通す
$ sudo mv composer.phar /usr/local/bin/composer

$ ls
# composer.pharが存在しないこと確認
...
... 

$ which composer
/usr/local/bin/composer

# composerのバージョンを確認
$ composer --version
Composer version 1.10.10 2020-08-03 11:35:19

パスを通すことに成功するとcomposer.phar がなくなっていて、 /usr/local/bin/composer に移動されているのが確認できます。

composerのバージョンが確認できていればOKです。

次はGoogleアカウントのセキュリティ設定を行いましょう!


2. Googleアカウントのセキュリティ設定

今回はgmailを使用するので、Googleアカウントを用います。

PHPで記述するプログラムでこのGoogleアカウントで設定されているメールアドレスが送信者のメールアドレスとなる想定です。

Googleアカウントの「安全性の低いアプリのアクセス」を許可されている場合、許可しないに変更してください。

現在では「安全性の低いアプリのアクセス」の許可は非推奨とされています。

以下のリンクに習って、「安全性の低いアプリのアクセス」は無効に設定してください。

Gmailヘルプ

次に、二段階認証を有効にします。

まずは以下のリンクから自身のGoogleアカウントページにアクセスしてください。

Googleアカウントマイページ

アクセスすると以下のような画面になっていると思います。

左側のセキュリテイをクリックしてください。

スクリーンショット 2020-08-17 21.55.39

以下のような画面から二段階認証をオンにしてください。

表示される案内に沿って手続きすれば問題ありません。

スクリーンショット 2020-08-17 22.06.24

二段階認証がオンにできれば、次に「アプリパスワード」を発行します。

アプリパスワードをクリックしてください。

スクリーンショット 2020-08-18 22.13.37

「アプリの選択」はメールを選択し、デバイスはMACを選択してください。

スクリーンショット 2020-08-18 22.18.04

最後に「生成」をクリックすることでアプリパスワードを取得することができます。

この生成したアプリパスワードはメモしておいてください。

Googleアカウントの設定は以上で終了です。

次はPHPでプログラムを書いていきます!


3. メール送信を行うプログラムを作成

いよいよPHPでメール送信を行うプログラムを書いていきます。

まずは作業ディレクトリを整えていきましょう。

以下の順でディレクトリ、ファイルを作成してください。

# 現在のディレクトリを確認
$ pwd
/Users/*********

# batchディレクトリを作成
$ mkdir batch

# 作成したbatchディレクトリへ移動
$ cd batch

# send_gmailディレクトリを作成
$ mkdir send_gmail

# 作成したsend_gmailディレクトリへ移動
$ cd send_gmail

# send_gmail.phpファイルを作成
$ touch send_gmail.php

メール送信を行うプログラムはsend_gmail.phpに記述していきます。

次にPHPMailerをインストールします。

PHPMailerはメール送信用のPHP ライブラリです。

外部の SMTP サーバーを利用(経由)してメールを送信することが可能です。

composerを使ってインストールします。

# 現在のディレクトリを確認
$ pwd
/Users/*********/batch/send_gmail

# PHPMailerをインストール
$ composer require phpmailer/phpmailer

$ ls
composer.json		composer.lock		send_gmail.php      vendor

インストールに成功するとsend_gmailディレクトリ配下に先ほど作成したsend_gmail.php以外にcomposer.json、composer.lock、vendorディレクトリが作成されます。

次にsend_gmail.phpにプログラムを記述していきます。

発行したアプリパスワードは公開しないようにしてください。

<?php

require_once( dirname( __FILE__ ).'/vendor/phpmailer/phpmailer/src/PHPMailer.php' );
require_once( dirname( __FILE__ ).'/vendor/phpmailer/phpmailer/src/Exception.php' );
require_once( dirname( __FILE__ ).'/vendor/phpmailer/phpmailer/src/SMTP.php' );

// SMTP設定情報
$config = new \stdClass();
$config->username  = "hoge@gmail.com"; // 送信者のメールアドレスを入れてください
$config->useralias = "hoge@gmail.com"; // usernameと同じメールアドレスを入れてください
$config->password  = "foobar"; // 発行したアプリパスワードを入れてください

$info = new \stdClass();
$info->to      = "hoge@gmail.com"; // 送信先のメールアドレスを入れてください
$info->subject = "テストメール"; // メールのタイトルを入れてください
$info->message = "おはようございます。";

send_mail_to_guest($config, $info);


function send_mail_to_guest($config, $info) {
     $mailer = new \PHPMailer\PHPMailer\PHPMailer(true);
     $mailer->CharSet = "iso-2022-jp-ms";
     $mailer->Encoding = "7bit";
     $mailer->IsSMTP();
     $mailer->Host = "smtp.gmail.com";
     $mailer->SMTPAuth = true;
     $mailer->SMTPDebug = 2;
     $mailer->SMTPSecure = "tls";
     $mailer->Port = 587;
     $mailer->Username = $config->username;
     $mailer->Password = $config->password;
     $mailer->setFrom($config->username, $config->useralias);

     $to = $info->to;
     $subject = $info->subject;
     $body = $info->message ."\r\n"
         . "\r\n"
         . "テストメールです。無視してください。\r\n"
         . "\r\n"
     ;

     $mailer->AddAddress($to);
     $mailer->Subject = mb_encode_mimeheader($subject, 'iso-2022-jp-ms');
     $mailer->Body    = mb_convert_encoding($body, "iso-2022-jp-ms", "utf-8" );

     $mailer->Send();
}

メールが送信されるかテストを行うため、以下の部分を全て自分のメールアドレスにしてください。

$config->username  = "hoge@gmail.com";
$config->useralias = "hoge@gmail.com"; 
$info->to = "hoge@gmail.com";

これで自分から自分へメール送信することになります。

実運用するときはコメントにあるように、usernameに送信者のメールアドレスを、toに送信先のメールアドレスを記述します。

また、メール本文を変更する場合は、以下の部分を用途に合わせて修正してください。

$body = $info->message ."\r\n"
         . "\r\n"
         . "テストメールです。無視してください。\r\n"
         . "\r\n"
     ;

では、ターミナルから実行してみます。

# 現在のディレクトリを確認
$ pwd
/Users/*********/batch/send_gmail

# send_gmail.phpを実行
php send_gmail.php

以下のようにメールが届けばOKです。

スクリーンショット 2020-08-22 13.46.27

次はメール送信を自動化していきます!


4. Cronでメール送信を自動化

手動でファイルを実行してメール送信できることが確認できたので、これを自動化していきます。

例えば、毎日朝9時に自動でメールを送信するといった感じです。

これにはCronを用います。

以下のコマンドでcronの設定を表示します。

# 現在のディレクトリを確認
$ pwd
/Users/*********/batch/send_gmail

# cron設定リストを表示
$ crontab -l
crontab: no crontab

まだ、cronの設定はしていないので、何も表示されないはずです。

cronの設定にphpのpathを記述する必要があるので、先に確認しておきます。

$ which php
/usr/bin/php​

phpのpathはPCによって異なるかもしれません。

上記はあくまで私の環境です。

では、cronの設定を行います。

# 現在のディレクトリを確認
$ pwd
/Users/*********/batch/send_gmail

# cron設定を編集・登録
$ crontab -e

コマンドを実行するとviエディタが立ち上がります。

スクリーンショット 2020-08-23 11.27.47

ここにcronの設定を記述していくことになります。

「i」を入力すると編集モードに切り替わります。

編集モードの状態で、設定を記述します。

* * * * * /usr/bin/php /Users/*********/batch/send_gmail/send_gmail.php

/usr/bin/phpの部分がphpのpath(コマンド $ which php の実行結果)で、

/Users/*********/batch/send_gmail/send_gmail.phpが実行するファイルのpathになります。

pathはご自身の環境に合わせてください。

記述が終われば、「esc」を入力し、編集モードを終了します。

その後、「:wq」を入力し、「Enter」押下で編集内容を保存して設定を終了します。

viエディタの基本操作について

cronが設定されているか確認します。

# 現在のディレクトリを確認
$ pwd
/Users/*********/batch/send_gmail

# cron設定を確認
$ crontab -l
* * * * * /usr/bin/php /Users/*********/batch/send_gmail/send_gmail.php

先ほどのcronの設定で「1分毎に実行する」という設定にしたので、1分毎にメールが届くか確認しましょう。

届いていれば無事cronが設定されているということです。

今回はテストを行うため、1分毎にしましたが、実際には1分毎に実行するということはあまりないと思います。

用途に合わせて、cronの設定をしてみてください。

以下のリンクが参考になります。

cronの日時指定を基礎から学ぶ


以上がメール送信の自動化でした。

少しでも、業務効率化に役立てれば嬉しいです。

最後まで読んでいただき、ありがとうございました。



この記事が気に入ったらサポートをしてみませんか?