(これは私の最初の質問ですので、私はそれがあまりにもZend特有でないことを願っています。 Zend Frameworkを超越したMIME関連の問題が含まれている可能性があるので、私はここで良い答えを得られる可能性が高いと感じています。私が直面している問題がZFのバグとみなされるべきかどうか、あるいは私が何かを誤解しているか誤解しているかどうかを理解しようとしています)Zend_Mail :: addHeader()が改行を取り除く理由を理解できません
私はZend_Mailを使って電子メール配信サービスのSendGridを介して送信されます。彼らのプラットフォームではSMTPサーバー経由で電子メールを送信できますが、特別なヘッダー(X-SMTPAPI)を使用すると追加機能が提供され、その値はJSONでエンコードされた独自パラメータの文字列です。
最終的に、私が通過していたヘッダーが長すぎる(1000文字を超えると思う)、エラーが発生しました。 Zend_Mail :: addHeader()に値を渡す前にPHPのネイティブwordwrap()関数を通過していることを知っていたので、私は混乱していました。
addHeader()は、改行を非常に意図的に削除しており、特にコメントはありません。
これは最初は妥当と思われました。おそらく、ZFは書式設定と改行の完全な制御を望んでいました。 Zend_Mailを使用中に呼び出される次の方法が::のaddHeader()
$value = $this->_encodeHeader($value);
それが含まれる場合、このメソッドは、値を符号化する(quoted-printableのいずれか、または適切なBASE64)と適当な長さの行にそれをチャンクが、のみありますZend_Mime :: isPrintable($ value)によって決定される「印刷不可能な文字」。
改行(\ n)は、実際には印刷できない文字と見なされます。したがって、以前のメソッド呼び出しで文字列から文字列が取り除かれなかった場合、長いヘッダーはQPとしてエンコードされ、72文字の行にチャンクされ、すべて正常に動作します。実際、私は_filterOther()の呼び出しをコメントアウトしたテストを行い、長いヘッダーはエンコードされ、問題なく処理されます。しかし、今は私が削除した行の背後にある目的を本当に理解することなく、ZFに不注意にハックしたので、これは長期的な解決策ではありません。
私の中期的な解決策は、Zend_Mailを拡張して新しいメソッドaddHeaderForceEncode()を作成することです。このメソッドは、常にヘッダーの値をエンコードするため、常に短い行にチャンクします。しかし、私はまだ最初の場所で_filterOther()呼び出しが必要な理由がわからないので、私はまだ満足していません - おそらく私はそれを回避するべきではないかもしれません。
誰も私にこの改行がストリップされている理由を説明できますか?必然的に、改行以外の「印刷不可能な文字」が含まれていないとヘッダーが長くなりすぎることがあります。
私はこの件に関してさまざまな検索を行い、いくつかのZFバグレポートを見てきましたが、これについて誰も話していませんでした。意外にも、それは本当にあいまいな問題であるようです。参考までにZF 1.11.11で作業しています。
更新:誰もが、私はこれについて開かれたZFの問題を追跡したい場合は、ここにある:Zend_Mail::addHeader() UNfolds long headers, then throws exception
StackOverflowですべてに回答できます) +1ここでの最初の質問です。 – Flavius
私を歓迎してくれてありがとう。 – LinusR