WordPressからプラグインなしでSMTP経由でメール送信する方法(PHPMailer使用)

WordPressにはPHPのメール送信用ライブラリの「PHPMailer」が入っていますが(\wp-includes\class-phpmailer.php)、こちらを使うとプラグインを利用せずSMTP経由でメール送信を実現することが出来ます。

PHPMailer SMTP設定

以下のコードを functions.php 等に追加して利用します。

/**
 * SMTP経由の送信設定
 */
function ag_send_mail_smtp($phpmailer)
{
    /* SMTP有効設定 */
    $phpmailer->isSMTP();
    /* SMTPホスト名 */
    $phpmailer->Host       = "smtp.example.com";
    /* SMTP認証の有無 */
    $phpmailer->SMTPAuth   = true;
    /* ポート番号 */
    $phpmailer->Port       = "587";
    /* ユーザー名 */
    $phpmailer->Username   = "ユーザー名";
    /* パスワード */
    $phpmailer->Password   = "パスワード";
    /* 暗号化方式 */
    $phpmailer->SMTPSecure = "tls";
    /* 送信者メールアドレス */
    $phpmailer->From       = "test@example.com";
    /* 送信者名 */
    $phpmailer->FromName = "送信者名";
    /* デバッグ */
    $phpmailer->SMTPDebug = 0;
}
add_action("phpmailer_init", "ag_send_mail_smtp");

設定関連コード

上記各設定に関する \wp-includes\class-phpmailer.php 内の関連コード抜粋

Host

/**
 * SMTP hosts.
 * Either a single hostname or multiple semicolon-delimited hostnames.
 * You can also specify a different port
 * for each host by using this format: [hostname:port]
 * (e.g. "smtp1.example.com:25;smtp2.example.com").
 * You can also specify encryption type, for example:
 * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465").
 * Hosts will be tried in order.
 * @var string
 */
public $Host = 'localhost';

Port

/**
 * The default SMTP server port.
 * @var integer
 * @TODO Why is this needed when the SMTP class takes care of it?
 */
public $Port = 25;

SMTPAuth

/**
 * Whether to use SMTP authentication.
 * Uses the Username and Password properties.
 * @var boolean
 * @see PHPMailer::$Username
 * @see PHPMailer::$Password
 */
public $SMTPAuth = false;

SMTPSecure

/**
 * What kind of encryption to use on the SMTP connection.
 * Options: '', 'ssl' or 'tls'
 * @var string
 */
public $SMTPSecure = '';

SMTPDebug

/**
 * SMTP class debug output mode.
 * Debug output level.
 * Options:
 * * `0` No output
 * * `1` Commands
 * * `2` Data and commands
 * * `3` As 2 plus connection status
 * * `4` Low-level data output
 * @var integer
 * @see SMTP::$do_debug
 */
public $SMTPDebug = 0;

wp_mail()関数でメール送信

PHPMailerの設定が終わったら下記コードなどを必要なページや処理内に設定します。※メール送信には wp_mail()関数を利用します

<?php
/* 送信内容など設定 */
$mail_to   = "送信先アドレス";
$subject   = "メール件名";
$mail_body = "メール本文";
$headers[] = "Cc: ccemail@example.com";
$headers[] = "Bcc: bccemail@example.com";

/* 送信実行 */
wp_mail($mail_to, $subject, $mail_body, $headers);

環境情報

WordPress 5.3.2 
エックスサーバー(x10)
PHP 7.2.17
MySQL 5.7

コメント

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