![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在、以下の内容でメールサーバおよびシステムを運用してます。
レンタルサーバを以下の内容で
OS:FreeBsd
DB:postgresql (eucコードで運用)
PG:perl5.8.8 (eucコードで記述)
最近、当システムから携帯電話(スマートフォン含む)へのメール送信で受信側(携帯)で文字化けが多くなっている。それで、システムの一部のUTF8化しようと思いました。それで、メール送信のライブラリを以下のように修正してみたが、本文が文字化けしてしまいます。なぜ文字するか原因がわかりません。
以下のソースはUTF8Nで記述しています。
※システム全部をUTF8コード化やDB(POSTGRESQL)もUTF8にする案もありますが、
改修作業が大きくて作業時間が少ない方法も模索しています。
どなたかご教授願います。
binmode(STDOUT, ":utf8");
use Encode;
use Encode qw(from_to);
use MIME::Base64;
use MIME::Entity;
use Net::SMTP;
use MIME::Words qw (:all);
sub sendmail()
{
my ($mail_date) = @_; <==メールのハッシュ配列(DBに登録されているメールの件名、本文)
my $smtp_server = $mail_date->{SMTPsrv};
my $smtp_port = '25';
# 送信者のメールアドレスを設定する。
my $mail_from = $mail_date->{MailFr};
# 宛先のメールアドレスを設定する。
my $mail_to = $mail_date->{MailTo};
# メールの件名を設定する。
from_to($mail_date->{Subjct},"euc-jp","utf8"); #UTF8に変換
$utf8_str_sub = $mail_date->{Subjct};
# メールの内容を設定する。
my $message;
my $utf8_str;
from_to($mail_date->{Message},"euc-jp","utf8"); #UTF8に変換
$message = $mail_date->{Message};
$utf8_str = $message;
# メールヘッダを作成する。
# from、to、件名共にMIME-Header(UTF-8)へエンコードします。
my $mail_header;
$mail_header = "From: " .encode('MIME-Header-ISO_2022_JP',$mail_from)."\n";
$mail_header .= "To: " .encode('MIME-Header-ISO_2022_JP',$mail_to) ."\n";
$mail_header .= "Subject: ".encode('MIME-Header-ISO_2022_JP',$utf8_str_sub) ."\n";
# UTF-8とbase64 encodeを使う事を明記します。
$mail_header .= "MIME-Version: 1.0\n";
$mail_header .= "Content-type: text/plain; charset=utf-8\n";
$mail_header .= "Content-Transfer-Encoding: base64\n";
$mail_header .= "\n";
# SMTPでメールを送る。
my $SMTP = Net::SMTP->new($smtp_server,Port=>$smtp_port);
$SMTP->mail($mail_from);
$SMTP->to($mail_to);
$SMTP->data();
$SMTP->datasend($mail_header);
$SMTP->datasend(encode_base64(encode('utf8', $utf8_str)));
$SMTP->dataend();
$SMTP->quit;
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
Socketを使ったプログラミングをしたことがないので、はっきりとはわかりませんが、
binmode(STDOUT, ":utf8");
が、何らかの悪さをしているかもしれません。
これをコメントアウトして試してみてください。
返信遅くなりました。
binmode(STDOUT, ":utf8");をコメントアウトしても状況は変わりませんでした。
それで、PostgresqlのSQLでselect時にコード変換できるようなのでそれで試しているとろこです。
No.1
- 回答日時:
原因は複数あるかもしれませんが、とりあえず以下のfrom_toは、
from_to($mail_date->{Subjct},"euc-jp","utf8"); #UTF8に変換
from_to($mail_date->{Message},"euc-jp","utf8"); #UTF8に変換
後にencode関数を使っているので、以下のようにdecode関数に書き換えたほうがいいと思います。
$mail_date->{Subjct} = decode("euc-jp", $mail_date->{Subjct});
$mail_date->{Message} = decode("euc-jp", $mail_date->{Message});
回答ありがとうございます。
from_to($mail_date->{Subjct},"euc-jp","utf8"); #UTF8に変換
from_to($mail_date->{Message},"euc-jp","utf8"); #UTF8に変換
を
$mail_date->{Subjct} = decode("euc-jp", $mail_date->{Subjct});
$mail_date->{Message} = decode("euc-jp", $mail_date->{Message});
に置き換えて実行しましたが、だめでした。
やはり、根本的につくり直しなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- PHP php 完了画面の送信メールのコードを書いているのですが・・・ 2 2023/06/02 12:01
- 英語 この"e-mail"が複数形でもなく、無冠詞なのはなぜですか? 「表現のための実践ロイヤル英文法」に 1 2022/07/10 16:12
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- 迷惑メール・スパム ヘルスケア テクノロジーズ 1 2023/02/13 08:23
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Outlook(アウトルック) 休みが明けてメールをみたらやばいです 3 2022/08/17 09:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl でエラー:Wide character...
-
MFCのコントロールにUTF-8の文...
-
EC-CUBEでの文字化け
-
【文字コード】外見上は全く同...
-
printfの書式指定での2バイト文...
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
VBA EXCEL あるセルの中の一...
-
EXCELからCSVにすると余計なカ...
-
「何とかで始まり、何とかで終...
-
VBA 置換文字がみつからない時
-
文字コードの%E3%80%とは何です...
-
マクロを使ってフォルダー内に...
-
csvデータ ダブルクォーテ...
-
COBOLでの全角文字の判定をした...
-
住宅にカナを入力する際に丁目...
-
C#で、テキストボックスの入力...
-
データにカンマが入ったCSVデー...
-
[VBA][Excel]クリップボードか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
jcode.plのかわり
-
MFCのコントロールにUTF-8の文...
-
【LaTeX】pBibTeXでのエラーの...
-
Perlで、文字の出現回数を調べ...
-
Cannot decode string with wid...
-
PerlでRSS取得 ~ 文字化け ~ ...
-
PHPの文字化けについて
-
HTML::Templateでutf-8のテンプ...
-
printfの書式指定での2バイト文...
-
sedやperlでの2バイト文字を含...
-
pythonの文字コードとファイル操作
-
デバッグ情報が文字化けする
-
JAVAでMySQLに接続すると日本語...
-
Java+MySQLで特殊文字(丸数字(...
-
オブジェクト? perlをオーバー...
-
WWW::Mechanizeの文字コードに...
-
UTF-16からUTF-8への変換
-
機種依存文字(株)を入力すると\...
-
XMLパラメータの取り込みに関して
おすすめ情報