created: 2019-06-27 00:00:00,tags:php,mail,laravel,

Swift_Message で CC とか BCC を取得する

Laravel が使っている Swift_Mailer というライブラリを使って色々独自実装を持ちたい時で、生成されたメールデータに用事がある時に毎回忘れて感覚で使ってエラーだすので書き残す。

メール本文やヘッダに持つデータは Swift_Message に格納される事になる。 そのため、表題の通り CC や BCC を取りたい場合 (それ以外も) このクラスの所有する API を使う。

$mailer->getCc();
$mailer->getBcc();

それぞれはこれだけの話なんだけど、上記で取得出来るデータの構造が連想配列で、よりにもよって key にアドレスが格納されている。

[
  "sample@sample.com" => null,
]

こんな感じ。多分、実装意図としては、連想配列の key に入れる事で集合と同じ効果を狙っている (挿入されたメールアドレスが重複した場合に 1 つにまとまる事を期待) と思うんだけど、取得する時までこの構造のままなので実に困る。(単純に考えると、配列として取得できる気がするのが困り所)

BCC に設定する時に複数を設定する場合と 1 つしか絶対に入れない時があり、今回は 1 つだけ欲しかったので下記で対応した。

key($mailer->getBcc());

全部を配列で取得する必要がある場合は下記とか。

array_keys($mailer->getBcc());