@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

qmailでの文字化けについて

1
投稿者投稿内容
backscorp
会議室デビュー日: 2002/11/05
投稿数: 4
投稿日時: 2002-11-05 23:04
初めて投稿する初心者です。宜しくお願いします。
現在、ASP.NETからメールサーバ(qmail)に指示を出して送信する設定をしておりますが、
gooメールなどのフリーメールで文字化けが発生しており、対応に困っております。
素人ながらに調べた結果、JISのエスケープシーケンスが正しく認識されない事が原因の様で、
文字化けしたメールのヘッダを見ると、Content-Transfer-Encoding: quoted-printable
となっています。これについて、色々と調べてみると、送信側のメールソフトがContent-Transfer-Encoding: 8bitという間違ったフィールドを付けた場合に発生するようです。
当初はメーラーのqmailが問題なのかと思いましたが、そうではないようで、メーラーに指示を
出しているASP.NETに問題があるようです。ここまで予想できたのですが、ここから壁に突き当たりました。どうすればよいのか、どなたかアドバイス頂けないでしょうか?
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2002-11-06 02:19
ASP.NETからどのようにしてメール送信をしているのかはわかりませんが、System.Web.Mail.SmtpMailクラス(C#派です)を使用してメールを送信しましたが、エンコードに関しては特におかしなヘッダ指定はされませんでした。(余計なヘッダはいくつか付いてはいましたが)

SmtpMail#SmtpServerプロパティでSMTPサーバを指定し、SmtpMail#Sendメソッドでメールを送信した時のヘッダは以下の通りです。ただし、本文の文字列はソースに直に書きました。

Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-11-06 16:19
.NET Framework がβだったか、1.0だったかの頃のソースより。
(たぶん動くと思うけど… f(^^; )

コード:
const int ISO2022JP = 50220;
System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage();
msg.From = "〜";
msg.To = "〜";
msg.Subject = "〜";
msg.Body = "〜";

// エンコーディングに ISO-2022-JP を指定
msg.BodyEncoding = Encoding.GetEncoding(ISO2022JP);
		
System.Web.Mail.SmtpMail.Send(msg);


※ わざわざ定数定義しなくてもよかったと思うけど、失念。
backscorp
会議室デビュー日: 2002/11/05
投稿数: 4
投稿日時: 2002-11-07 00:27
本人です。
少し情報が不足しておりました。不慣れなものでご容赦下さい。
biac様、二天様、レスありがとうございました。大変参考になりました。
こちらの環境を申し上げると、メールサーバはOS:Turbo Linux 7で、メールソフトは
qmailを使用しています。ASP.NETのIISを通じ、梱包されているSMTPツールを使用。
同じ環境から送信しても、
Content-Transfer-Encoding: 7bit
Content-Transfer-Encoding: 8bit
Content-Transfer-Encoding: quoted-printable
の三種類が存在し、OE等で受信するには問題ないのですが、いわゆるフリーメールや
一部の大学期間等で文字化けおよび送信されないと言う現象が起こっているようです。
こちらで設定しているドメインのSMTP経由だと化け、別のSMTP経由だと化けないと言う
現象もあり、経由の問題なのか、それともファイアウォール等の設定の問題なのか
推察して検証してと言う繰り返しです。拡張SMTPとSMTPの7ビット・8ビットの関係かと
疑ったのですが、実際に7ビットで送信されている物もあり、理解に苦しみます。

一応その他の環境を書いておきます。
DBserver:MS Windows 2000 server+MS SQLserver2000
Webserver:MS Windows 2000 server
Mailserver:上記の通りです。
firewall:FireBoxV700

宜しくお願いいたします。
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2002-11-07 03:59
> 梱包されているSMTPツールを使用。

.NETのクラスを使用してメールを送信している訳ではないのでしょうか?


> 同じ環境から送信しても、
> Content-Transfer-Encoding: 7bit
> Content-Transfer-Encoding: 8bit
> Content-Transfer-Encoding: quoted-printable
> の三種類が存在し、

SMTPサーバに合わせてエンコードを変えているのだとは思いますが、指定の通りにエンコードはされているのでしょうか?
もしきちんとエンコードされているのであれば、受信側でのデコードの問題だとも考えられます。
backscorp
会議室デビュー日: 2002/11/05
投稿数: 4
投稿日時: 2002-11-07 13:12
本人のレスです。

まず、二天様、および会議室メンバーの方々にはお礼申し上げます。

ASP.NETのML過去ログを色々と調査したところ、今回とほとんど類似したケース
の報告事例がありました。
いわゆるフリーメールでの文字化け多発の現象で、7ビットとquoted-printableに言
及してありました。それによると、どうやら85byte以上改行しない文章がある
メールで起こる可能性が高いそうです。85byte以内に必ず改行を入れるか、Basp21の
使用が推奨されていましたが、最後に強制的に7bitにする裏技が紹介されていました。
そのコードでテストしたところ、文字化けは解消されておりました。
どうもWindows2000のCDO機能に問題があるようです。

結果、この裏技パッチで強制的に7bitにすることで文字化けは解消できそうです。
色々とご指導・ご教授いただきありがとうございました。
kanori
会議室デビュー日: 2002/11/08
投稿数: 1
投稿日時: 2002-11-08 17:01
裏技とは何でしょうか?
これはMS以外のツールを使ってCDOを制御するようなものでしょうか?
ただ単にレジストを変更したり、CDO.Configurationを使ったのでしょうか?
backscorp
会議室デビュー日: 2002/11/05
投稿数: 4
投稿日時: 2002-11-08 17:16
メールのヘッダに文字コードを強制的に7bitにするプログラムを付加しただけです。
biac様のコードにもう一行、Content-Transfer-Encoding: 7bitを指定する
プログラムです。具体的なコードの公開は遠慮させてください。申し訳ありません。
必要ならメールにてお問い合わせをお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)