PHPプログラミング

最終更新日:
公開日:

レシピ

Swift Mailer

Swift Mailerでメールの文字コードを設定する

メール送信で大切な文字コード。Switft Mailerでメールを送信する際に、文字コードを設定する方法を解説します。

この記事のポイント

  • SwiftMailerでの文字コード設定方法について知る
  • 任意の文字コードを指定する

目次

地味だけど大切な文字コード

メールにおいて大切な文字コード。
受け取ったメールの文面が文字化けしていたら読むことができません。
特に日本語は文字コードに気をつける必要があります。

Swfit Mailerライブラリでも文字コードについての設定は簡単に行えるようになっています。

まず、ライブラリの「doc」フォルダ内にある「japanese.rst」の中で、もしメールに日本語を使う場合は予め次のコードを実行するようアドバイスが記載されています。
※公式サイトのこちらのページにも同じことが書いてあります。

japanese.rst

Swift::init(function () {
    Swift_DependencyContainer::getInstance()
        ->register('mime.qpheaderencoder')
        ->asAliasOf('mime.base64headerencoder');

    Swift_Preferences::getInstance()->setCharset('iso-2022-jp');
});

特に最後から2行目の「iso-2022-jp」は重要。
PHPでメール送信する時によく指定される文字コードです。

メール送信の全体のコードは次のようになります。

swiftmailer.php

<?php
require_once 'vendor/autoload.php';

Swift::init(function () {
    Swift_DependencyContainer::getInstance()
        ->register('mime.qpheaderencoder')
        ->asAliasOf('mime.base64headerencoder');

    Swift_Preferences::getInstance()->setCharset('iso-2022-jp');
});

$transport = new Swift_SmtpTransport('localhost', 587);
$transport->setUsername('username');
$transport->setPassword('password');

$mailer = new Swift_Mailer($transport);

$message = new Swift_Message();
$message->setSubject('テストメール');
$message->setFrom(['noreply@gray-code.com' => 'GRAYCODE']);
$message->setTo(['taroyamada@sample.com'=>'山田太郎']);
$message->setBody('メールの文字コード設定のテストです');

$result = $mailer->send($message);

メール送信の基本的な部分については「Swift Mailerのインストール&メールを送信する」で解説した内容を使用しています。

コードの途中で任意の文字コードを設定する

基本的には上記の設定で問題ありませんが、必要があればメールを作成している途中で文字コードを設定することも可能です。

具体的には次の3パターンの設定方法が用意されています。

swiftmailer.php


--- 省略 ---

$message = new Swift_Message();

// (1)setCharsetメソッドで文字コード設定
$message->setCharset('iso-2022-jp');

$message->setSubject('メールの文字コードテスト');
$message->setFrom(['noreply@gray-code.com' => 'GRAYCODE']);
$message->setTo(['taroyamada@sample.com'=>'山田太郎']);

// (2)setBodyメソッドの第3パラメータに文字コードを指定
$message->setBody('メールの文字コード設定のテストです', 'text/plain', 'iso-2022-jp');

// (3)addPartメソッドの第3パラメータに文字コードを指定
$message->addPart('メールの文字コード設定のテストです', 'text/plain', 'iso-2022-jp');

--- 省略 ---

指定できる文字コードには次のようなものがあります。

  • JISコード (iso-2022-jp) – インターネット上で日本語を扱うための文字コード。メールではほとんどこの文字コードを使っている
  • Shift-JIS (shift_jis) – コンピュータ上で日本語を含む文字列を表現するために用いられる文字コード
  • EUC (euc-jp) – UNIX上で日本語の文字を扱う場合にもっとも多く利用されている文字コード
  • JISコード (iso-2022-jp) – インターネット上で日本語を扱うための文字コード
  • Unicode UTF-8 (utf-8) – Unicodeのエンコードの1種で、世界中の言語に対応するために考案された文字コード