created: 2019-06-27 24: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());
- php manual | key https://www.php.net/manual/ja/function.key.php
全部を配列で取得する必要がある場合は下記とか。
array_keys($mailer->getBcc());