勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法

   2024/01/12  PHP

メールサーバを構築せずに独自ドメインのメールアドレスにてメール送信を行いたい。過去にGmailのSTPTサーバ経由でメール送信する方法をメモしたが、この方法だと送信元メールアドレスは当然Gmailアドレスになる。何か方法は無いか調べてみるとSendGridというサービスを利用する方法が簡単に実装できた。以下に対応方法をメモ。

 

SendGrid

SendGridとは

SendGridとはクラウドベースのメール配信サービスであり、メールサーバを構築せずともAPIやSMTP経由でメール送信が可能。また、迷惑メール判定されにくいっぽい(過去に通常のメール送信だと迷惑メール判定されたのにSendGrid経由だと迷惑メール判定されないというケースがあった)。

尚、12,000通/月までは無料で利用できる。

アカウント登録

新規登録ページよりアカウントを登録する。尚、アカウントは即時発行ではなく、翌営業日等に発行される点に注意する。

SMTP用パスワードの発行

ログインページよりログインし、左側のメニューの「Email API→Integration Guide→SMTP RelayのChoose」に進み「API Key Name」を入力し、「Create Key」をクリックするとパスワードが発行される。

尚、ホストは「smtp.sendgrid.net」、ユーザ名は「apikey」になる。

 

PHPMailerの準備

以下よりダウンロードし展開する。

https://github.com/PHPMailer/PHPMailer

srcディレクトリ内の「PHPMailer.php」「Exception.php」「SMTP.php」をアップロードする。もしくはsrcディレクトリごとアップロードでも良い。

 

ソースコード

<?php

require('./PHPMailer.php');
require('./Exception.php');
require('./SMTP.php');

// 文字エンコードを指定
mb_language('uni');
mb_internal_encoding('UTF-8');

// インスタンスを生成(true指定で例外を有効化)
$mail = new PHPMailer\PHPMailer\PHPMailer();

try {

    $host = 'smtp.sendgrid.net';
    $username = 'apikey'; 
    $password = 'パスワード';

    //差出人
    $from = '差出人のメールアドレス';
    $fromname = '差出人名';

    //宛先
    $to = '宛先のメールアドレス';
    $toname = $to;

    //件名・本文
    $subject = 'subject';
    $body = 'body';

    //メール設定
    $mail->SMTPDebug = 0; //デバッグ用
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->Host = $host;
    $mail->Username = $username;
    $mail->Password = $password;
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;
    $mail->CharSet = "utf-8";
    $mail->Encoding = "base64";
    $mail->setFrom($from, $fromname);
    $mail->addAddress($to, $toname);
    $mail->Subject = $subject;
    $mail->Body		= $body;

    //メール送信
    $mail->send();
    
    //送信成功時の処理

} catch (Exception $e) {

    //送信失敗時の処理

}

各種メールアドレスやパスワード部分は適宜変更する。尚、送信元アドレスであるドメインのSPFレコードやMXレコードを設定しなくても送信が確認できた。

 

所感

私的にサーバ関連の中でもメールサーバに関しては苦手意識があった為、今回のような送信方法を知れたのは良かった。

 - PHP

  関連記事

Mailtrap & PHPMailerでメールサーバ無しの環境でもメール送信テストを行う方法

開発環境等メールサーバが無い環境でメール送信テストを行う際にMailtrapとい ...

PHPMailerでエンベロープFrom(Return-Path)を指定する方法

同じメールアドレスから送信したメールがmb_send_mail関数だと受信できる ...

PHPMailerでメールを送信する際にTLS / SSL暗号化させる方法

PHPMailerでメールを送信したところGmailで確認すると赤い鍵のようなア ...

PHPMailerでエラーメッセージを日本語で出力する方法

PHPMailerのGitHubページを見ていると言語設定についての案内を見つけ ...

PHPMailerでエラーメッセージ及びデバッグログの表示方法について

PHPMailerでエラーメッセージ及びデバッグログを表示させたいというケースが ...