以前にも同じ質問をしたのですが、いまいち解決していないので、もう一度質問させて頂きます。
ホームページでsendmailをつかってフォームより記入してもらった内容を自分のところと確認メールとして記入した人のところに送るようにしていますが、確認メールが文字化けすることがあるようです。
しかし、全ての人に対して化けるというわけではなく、ほとんどの場合は大丈夫なようですが、一部の人に対してだけ化けるようです。
関係しそうな部分を大まかに書くと下記のようにしておりますが、間違っているでしょうか?
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer,
$ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
$xx =$value;
&trans;
$value = $xx;
}
sub trans{
$from='[@01-9A-Za-z._-]';
$to='[@01-9A-Za-z._-]';
&jcode'convert(*xx, 'euc');
&jcode'convert(*from, 'euc');
&jcode'convert(*to, 'euc');
&jcode'tr(*xx, $from, $to);
&jcode'convert(*xx, 'sjis');
}
&jcode'convert(*message,'jis');
if (!open(MAIL,"|$sendmail $mail_address")) {&error;}
&jis("Subject: $mailname"); print MAIL "$msg\n";
print MAIL "To: $mail_address\n";
print MAIL "From: $mailfrom\n";
print MAIL "\n";
print MAIL "$message";
close(MAIL);
sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis');}
No.3ベストアンサー
- 回答日時:
以下のヘッダが必要です。
文字コードを宣言していなければ自動でエンコードしないといけないので、誤認識やデコードしないメーラーがあって当然です。
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
先に指摘しましたが、SubjectがMIMEエンコードされてないのも是正すべきです。
No.2
- 回答日時:
送っているヘッダの内用はどうなってますでしょうか?
掲載されている部分だけではヘッダが全然足りていませんが。ヘッダの内用がおかしいとかは大丈夫なのでしょうか?
ヘッダの内容についてですが、特に何も書いていませんでした。フリーで配布されている他のCGIをみたら下記のようなものが書かれておりましたが、これを付け加えればよいのでしょうか?
度々申し訳ありませんが、必要な記述をご教示頂きますようお願い致します。
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n\n";
No.1
- 回答日時:
化ける場合と化けない場合を明示してもらわないとわからなさそうです。
(実はいわゆる半角かなが化けてるだけとか?)ところで本文が化ける理由はわかりませんが、このソースだとSubjectをmimeエンコードしてないので、Subjectは化けると思います。
本来はこのソースではSubjectは必ず化けるはずですが、ちゃんと表示してしまう“規格外のメーラー”が世の中多いですので。
回答ありがとうございます。
化ける場合ですが、一部の文字が化けているわけではなく、文章全体です。このような感じです
$B65;U;XL>$"$j$G$4EPO?$5$l$?J}
但し、そういう場合でもSubjectは化けていないようなのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP php 完了画面の送信メールのコードを書いているのですが・・・ 2 2023/06/02 12:01
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- 英語 この"e-mail"が複数形でもなく、無冠詞なのはなぜですか? 「表現のための実践ロイヤル英文法」に 1 2022/07/10 16:12
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sendmailで本文が文字化けします
-
Sendmailの文字化けについて
-
Application.ScreenUpdating = ...
-
構造体の各データの表示につい...
-
I2C接続のLCDディスプレイを使う
-
swift 文字コードから文字に変...
-
セレクトボックスである項目を...
-
JSONで文字列が長い時
-
[python] 文字列を変数名として...
-
ACCESS テキストボックスを隙...
-
メモリをアドレスを直接指定し...
-
セレクトメニューで選んだ値を...
-
python print文のエラー
-
ホームページビルダーのメール...
-
C# GetFilesで複数のファイルの...
-
どちのほうがすきですか?
-
Pythonでターミナルに文字を出...
-
pythonの*
-
複数のIP取得
-
テーブル内でドロップダウンメ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sendmailで複数の宛先にメール...
-
フォームの日本語が文字化け
-
Perl からbashを呼び出したい
-
sendmailで複数アドレスに送信...
-
メール送信プログラムに詳しい...
-
Perlにて、sendmailを使用する...
-
Perlからメール送信で文字化け
-
Sendmailの文字化けについて
-
Perl メール 初心者
-
Sendmailで送信すると本文にメ...
-
sendmailで本文が文字化けします
-
crontabで
-
sendmailで送信したメールが届...
-
メールのタグ(<a href="mailto:...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
どちのほうがすきですか?
-
formで特定のinputを送信しない...
-
Pythonでターミナルに文字を出...
-
16進の10進変換について
おすすめ情報