以前にも同じ質問をしたのですが、いまいち解決していないので、もう一度質問させて頂きます。
ホームページで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で複数の宛先にメール...
-
sendmailが上手く動かないのか...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
16進の10進変換について
-
メモリをアドレスを直接指定し...
-
formで特定のinputを送信しない...
-
CGI(Perl)で、Net::FTPを使いたい
-
VB6で、長い時間かかる処理...
-
複数列を持ったリストボックス...
-
<SELECT>タグの折り返し
-
【至急!!!】python言語で本を見...
-
文字の横にプルダウンを表示さ...
-
シェルスクリプトで、空白(ス...
-
セレクトボックスのselected属...
-
初回起動のみ判別したい
-
phpでボタンを押したときに変数...
-
python3について。
-
linq で 楽天ウェブサービスのX...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sendmailで複数の宛先にメール...
-
フォームの日本語が文字化け
-
Perlからメール送信で文字化け
-
Sendmailで送信。メアドが違う...
-
CGI メールフォームからBCCのア...
-
perl フォームメール送信の...
-
Perl からbashを呼び出したい
-
sendmailで複数アドレスに送信...
-
perl で mailto: リンク
-
auのiPhoneでの受信メールが文...
-
sendmailが上手く動かないのか...
-
メールフォームの訪問者情報取...
-
自動返信について
-
crontabで
-
sendmailのFROMに日本語を使う
-
cgi.pmで作成されたsendmailプ...
-
メールのタグ(<a href="mailto:...
-
sendmailについて
-
netsend で振り分け
-
メールフォームCGIの文字化け。...
おすすめ情報