【PHP】WordPressのメール送信にSMTP設定する方法

MixhostのcPanelからメールアカウントを作成します。

cPanelの『電子メールアカウント』から『+作成』を押し使用したいドメインを選択、任意のユーザー名とパスワードを入力してメールアカウントを作成します。

その後、作成したメールアカウントの『管理』を開き、ページ内メニューの『Connect Devices』を開きます。

そのページ内に記載されている、
■ユーザー名
■パスワード
■受信サーバー
■送信サーバー
に記載されている情報をメモします。
(※受信サーバーはお問合せを受け取るだけなら必要ありません)

その後、WordPressテーマの設定に移ります。

まずは『functions.php』にこちらを記載して、WordPressのメニューの『設定』の中に『SMTP設定』という項目を作成します。

コードが長くなるので、require_onceなどを使用して別フォルダに分けて記述する事を推奨します。

// 管理画面にサブメニュー追加
<?php
add_action('admin_menu', 'add_smtp_setting_menu');
function add_smtp_setting_menu() {
  add_options_page(
    'SMTP設定',
    'SMTP設定',
    'manage_options',
    'smtp-setting',
    'smtp_setting_page'
  );
}
  function smtp_setting_page() {
  if (!current_user_can('manage_options')) {
    wp_die(__('You do not have sufficient permissions to access this page.'));
  }
?>
  <div class="wrap">
    <form method="post" action="options.php">
        <?php settings_fields('smtp_settings-group'); ?>
        <?php do_settings_sections('smtp_settings-group'); ?>

       <?php $smtp_settings = wp_parse_args(get_option('smtp_settings'), [
      'host' => '',
      'port' => '',
      'username' => '',
      'password' => '',
      'from_address' => '',
      'from_name' => '',
      ]); ?>
      <div class="metabox-holder">
        <div class="postbox">
          <div class="inside">
            <div class="main">
              <h3>SMTP設定</h3>
              <div style="width: 100%;">
                <div style="padding: 10px 0; font-weight: bold;">ホスト名</div>
                <input type="text" name="smtp_settings[host]" value="<?php echo esc_attr($smtp_settings['host']); ?>" style="width: 200px;">
              </div>
              <div style="width: 100%;">
                <div style="padding: 10px 0; font-weight: bold;">ポート</div>
                <input type="text" name="smtp_settings[port]" value="<?php echo esc_attr($smtp_settings['port']); ?>" style="width: 200px;">
              </div>
              <div style="width: 100%;">
                <div style="padding: 10px 0; font-weight: bold;">ユーザー名</div>
                <input type="text" name="smtp_settings[username]" value="<?php echo esc_attr($smtp_settings['username']); ?>" style="width: 200px;">
              </div>
              <div style="width: 100%;">
                <div style="padding: 10px 0; font-weight: bold;">パスワード</div>
                <input type="text" name="smtp_settings[password]" value="<?php echo esc_attr($smtp_settings['password']); ?>" style="width: 200px;">
              </div>
              <div style="width: 100%;">
                <div style="padding: 10px 0; font-weight: bold;">送信元アドレス</div>
                <input type="text" name="smtp_settings[from_address]" value="<?php echo esc_attr($smtp_settings['from_address']); ?>" style="width: 200px;">
              </div>
              <div style="width: 100%;">
                <div style="padding: 10px 0; font-weight: bold;">送信元名</div>
                <input type="text" name="smtp_settings[from_name]" value="<?php echo esc_attr($smtp_settings['from_name']); ?>" style="width: 200px;">
              </div>
            </div>
          </div>
        </div>
      </div>

      <div class="settings_submit_btn">
        <?php submit_button(); ?>
      </div>
    </form>
 </div>
<?php
}

add_action('admin_init', 'init_smtp_settings');
function init_smtp_settings() {
  register_setting('smtp_settings-group', 'smtp_settings');
}

次に、お使いのテーマの『functions.php』に下記の通り記載することで、 SMTP設定をテーマに反映させることが出来ます。

// SMTP設定
add_action('phpmailer_init', 'mailer_config', 10);
function mailer_config($mailer) {
$options = get_option('smtp_settings', []);
if (!empty($options)) {
  $mailer->IsSMTP();
  $mailer->SMTPAuth = true;
  $mailer->Host = $options['host'];
  $mailer->Port = $options['port'];
  $mailer->Username = $options['username'];
  $mailer->Password = $options['password'];
  $mailer->CharSet = "utf-8";
  $mailer->SMTPSecure = 'ssl';
  $mailer->setFrom($options['from_address'], $options['from_name']);
  }
}

以上2つを記述し、保存すると、WordPressの設定に『SMTP設定』という項目が追加になっています。

こちらからSMTP設定をします。

■ホスト名:受信サーバーのmail.xxxx.comを入力します(大抵ドメインになるかと思います。)
■ポート:送信サーバーのSMTP Port: の数値を入力します。
■ユーザー名:作成したユーザー名を入力します。
■パスワード:作成したパスワードを入力します。
■送信元アドレス:アドレを入力します。ス(大抵の場合はユーザー名と同じで大丈夫だと思います。)
■送信者元名:メールを送信する際に相手に表示する名前を入力します。

上記6点をすべて設定すれば、設定完了です。
最後に、テストでお問合せ等でメール送信をして確認してみてください。