• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CGIフォームから飛ばすメールでチルダ文字化け)

CGIフォームから飛ばすメールでチルダ文字化け

このQ&Aのポイント
  • フリーCGIでメール送信まで成功しましたが、一部の文字に文字化けが発生しました。
  • チルダ(全角)等の文字化けと機種依存文字の対応方法について教えてください。
  • CGIに関しては素人ですが、解決方法を教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

メール本文は、iso-2022-jpでなければなりません。 ヘッダー内に  日本語などを含む場合は、Base64エンコードをします。  一行の文字数は、 75バイト以内です。  他にも沢山、mailに対しては規定があります。これを守らないと・・

benkei1980
質問者

お礼

返答が遅れ申し訳ございません。 いろいろご教授いただき、ありがとうございます。 今回は解決までには至りませんでした。 ORUKA1951さんには何度もアドバイスいただいたのに、申し訳ございません。また、時間があるときに、いろいろ調べてみます。 ありがとうございました。

benkei1980
質問者

補足

ORUKA1951さん ご回答ありがとうございます。 ORUKA1951さんがおっしゃられたとおり、下記のように設定しました。 <form name="form1" method="post" action="mail.cgi" accept-charset="iso-2022-jp"> また、Base64エンコードはよくわかりませんが、 「mimew.pl」に下記のようにコメントがありましたので、 デフォルトで設定されているようです。 データをBase64形式またはQuoted-Printable形式でエンコードする。 # 第2パラメータに"qp"または"b64"を指定することによりコーディング形式 # を指示することができる。第2パラメータを省略するとBase64形式でエン # コードする。 しかし、上記の設定にすると、今度は日本語全般が文字化けになりました。 サイトはUTF-8で作成しているので、その辺りは変更しないでいきたいのですが、何か良い方法はないでしょうか。

その他の回答 (1)

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

外すかもしれません。その時はごめんなさい。 1)CGIの文字コードがShift-JISならばEUCにしてください   特定の文字が文字化けするのはこれが原因な気がしています 2)ヘッダのサブジェクトだけをJISにする理由が謎なのでヘッダを作ってから全部JISにしてみてください   (これが一番怪しいです) 3)HTMLメールのようですが、$bodyの先頭に、Content-Typeの設定は必要ではないですか?   Content-Type: text/html; charset=UTF-8\n\n   http://dqn.sakusakutto.jp/2011/08/content-type-texthtml-charset-utf8.html

benkei1980
質問者

お礼

返答が遅れ申し訳ございません。 いろいろご教授いただき、ありがとうございます。 今回は解決までには至りませんでした。 折角、アドバイスいただいたのに、申し訳ございません。また、時間があるときに、いろいろ調べてみます。 ありがとうございました。

benkei1980
質問者

補足

ありがとうございます。 すみません。上記の内容で一部間違いがありました。 #--- send mail --- sub sendMail{ $body .= "[host]\n$host\n"; $body .= "[IP Address]\n$addr\n"; Jcode::convert(\$subject, 'jis'); $header .= "To: $mailto\n"; $header .= "Cc: $mailcc\n"; $header .= "Bcc: $mailbcc\n"; $header .= "From: $mailfrom\n"; $header .= "Subject: $subject\n\n"; Jcode::convert(\$body, 'jis'); open(SENDMAIL, "|$sendmail -t -oi") || &error("メール送信に失敗しました。"); print SENDMAIL &mimeencode($header); print SENDMAIL "$body\n"; close(SENDMAIL); } このように修正した状態が現在の文字化けの状態です。 >CGIの文字コードがShift-JISならばEUCにしてください 文字コードを変更するのは怖いですが、一度試してみます。 >3)HTMLメールのようですが、$bodyの先頭に、Content-Typeの設定は必要ではないですか? すみません。記述方法がわからないです(+_+)

関連するQ&A

専門家に質問してみよう