cfmail送信時の添付ファイル名が受信先で正しく表示されない

ColdFusion 2016 Update 2 / ColdFusion 11 Update 11 よりメール送信時に使用されるライブラリ(Java Mail)が新しいものに更新されました。これは同Updateでメール関連に関する不具合の修正が含まれており、それに関連してライブラリも更新された模様ですが、Update適用以降、これまでは問題がなかった添付ファイルのファイル名が受信先のメーラーで正しく受信できない場合があることが報告されています。

新しいJava Mailのライブラリでは、添付ファイルのファイル名をRFC 2231の仕様でエンコードして送信するように内部動作が変更されたためです。この変更により、添付ファイル名の変換方法がファイル名の長さによって、従来のエンコードとは異なる変換をされるため、RFC 2231に対応していないメーラーでそのメールを受信すると、添付ファイルのファイル名が正しく受け取れない場合があります。

変換方法の違いとしては、下記のように cfmail を使い.cfmファイルと同じディレクトリにある.pdfファイルを添付したとします。

例:
<cfset objSMTP = structNew()>
<cfset objSMTP.server = "smtpサーバー">
<cfset objSMTP.username = "ユーザー名">
<cfset objSMTP.password = "パスワード">
<cfset objSMTP.from = "送信元メアド">
<cfset objSMTP.to = "送信先メアド">
<cfset objSMTP.port = ポート番号>
<cfset objSMTP.subject = "メール表題">
<cfset objSMTP.useSSL = true|false>
<cfset objSMTP.useTLS = true|false>
<cfset objSMTP.charset = "メール本文の文字コード">

<cfmail  attributecollection="#objSMTP#">メールボックスを確認して下さい。テストです。
  <cfmailparam file="#ExpandPath('てすとてすとてすと.pdf')#">
</cfmail>

cfmailparamで指定しているファイル名が「てすとてすとてすと.pdf」の場合と「てすとてすとてすとてすと.pdf」の場合に、メール送信時に作成されるメールヘッダの添付ファイルの記述は以下のようになります。

  • てすとてすとてすと.pdf の場合
    file:  C:\ColdFusion11\cfusion\wwwroot\xxxxxx\てすとてすとてすと.pdf
    file-type:  application/octet-stream;
             name="=?UTF-8?B?44Gm44GZ44Go44Gm44GZ44Go44Gm44GZ44GoLnBkZg==?="
    file-disposition:  attachment
     
  • てすとてすとてすとてすと.pdfの場合
    file:  C:\ColdFusion11\cfusion\wwwroot\xxxxxx\てすとてすとてすとてすと.pdf
    file-type:  application/octet-stream;
             name*0="=?UTF-8?B?44Gm44GZ44Go44Gm44GZ44Go44Gm44GZ44Go44Gm44GZ44GoLn";
             name*1="BkZg==?="
    file-disposition:  attachment

添付ファイルのファイル名をエンコードした際、エンコードの文字列が60文字を超えると name*0, name*1 のように分割されて送信されています。

上記の形式で送信されてきたメールに対し、受信するメーラーが RFC2231 に対応していないメーラーの場合に、添付ファイル名が正しくデコードできずにそのまま=8?B?44Gm44 …となったり、Outlookの場合でも、添付ファイル名がxxxxx.datという名前で受信するなどの動作となります。

この対応としては、メーラーをバージョンアップすることやメーラーの設定を変更する等で解消する可能性がありますが、従来の方式で添付ファイル名をエンコードするようにメールライブラリの設定を変更する方法も可能です。下記のサイトで同様のやり方が紹介されていました。

http://stackoverflow.com/questions/30628139/set-mail-strictly-mime-parm-folding-in-javamail

※上記のスレッドに記載されている JVMの引数にパラメーターを設定する(-Dmail.mime.encodeparameters=false)ことで、プログラムの修正を行わずに従来の動作となりますので、参考までにその方法を紹介します。

設定方法の例:

  1. jvm.configをバックアップします。
    例:C:\ColdFusion2016\cfusion\bin\jvm.config
  2. ColdFusion Administratorをブラウザからリクエストして、[サーバーの設定]の「JavaとJVM」画面を開き、「JVM引数」に「-Dmail.mime.encodeparameters=false」を追加するか、上記のjvm.configファイルをテキストエディタで開き、「java.args」に「-Dmail.mime.encodeparameters=false」を追加します。
    ※いずれの場合も、改行を追加しないようにして下さい。
  3. ColdFusion Application Serverサービスを再起動します。

設定に誤り等があり、サーバーが起動しなくなった場合は、1. のバックアップしたファイルをもとの位置に戻して再度入力をやり直して下さい。


 


記事公開日:2017年08月04日
最終更新日:2017年08月07日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.