• 締切済み
  • 困ってます

UTF8コードでのメール送信

現在、以下の内容でメールサーバおよびシステムを運用してます。 レンタルサーバを以下の内容で 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; }

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1204
  • ありがとう数2

みんなの回答

  • 回答No.2

Socketを使ったプログラミングをしたことがないので、はっきりとはわかりませんが、 binmode(STDOUT, ":utf8"); が、何らかの悪さをしているかもしれません。 これをコメントアウトして試してみてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

返信遅くなりました。 binmode(STDOUT, ":utf8");をコメントアウトしても状況は変わりませんでした。 それで、PostgresqlのSQLでselect時にコード変換できるようなのでそれで試しているとろこです。

関連するQ&A

  • Perl+UTF8で文字化け

    以下の環境にてメール送信プログラムを作成していますが、 ありがちな文字化け、且、ボディーが表示されない不具合が発生しています。 サーバ:linux apache レンタルサーバ ※Encode.pm、Jcode.pm無し。モジュールインストール不可。 Perl version: 5.006001 ソースエンコード:utf-8 自分の解釈としてはutf8で記述しているので、 charset=utf-8にしておけば、 MIMEエンコードさえしてやれば 表示できると考えているのですが、 やはり甘い考えなのでしょうか? また、同サイト質問NO2868794も参考にさせていただきましたが、上手くいきません。 以下ソース(エンコード:utf-8) use utf8; use MIME::Base64; use POSIX; ※アドレス表記はこのサイトの投稿チェックに引っかかるので省略します。 my $to = 'XXXX@XXXX'.XXX; my $from_nm = "送信者名"; my $from_adr = "XXXXX@XXX.XXX"; my $subject = "メール表題"; my $body = "本文"; # 送信者名を MIME エンコード encode_base64($from_nm,""); # subjectを MIME エンコード encode_base64($subject,""); $subject = "=?utf-8?B?" . $subject . "?="; # 本文を MIME エンコード encode_base64($body); my $MailPass = "XXXX/XXXX/XXX"; #SendMail Pass open(MAIL,"| $MailPass -t"); #======================================================== print MAIL <<"EOF_MAIL"; From: $from_nm<$from_adr> To: $to Subject: $subject Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 MIME-Version: 1.0 $body EOF_MAIL #======================================================== close MAIL; その他、色々ググっては見たのですが、自分ではみつけられず、 どうかアドバイスありましたらよろしくお願いいたします。

  • Centos5(utf8)のperl でメール送信の関数プログラムを作

    Centos5(utf8)のperl でメール送信の関数プログラムを作成しています。 bccにもメールを送信したいのですが、呼び出される度にbccのメールアドレスの数が異なります。以下はテスト的に作った動くサンプルです。 #!/usr/bin/perl use Net::SMTP; use Encode; use strict; 1 my $ServerName = 'mail.server.jp'; 2 my $from = 'from@mailaddress'; 3 my $to = 'to@mail.address'; 4 my $bcc = 'bcc0@mail.address'; 5 my $anotherbcc = 'bcc1@mail.address'; 6 my $onemorebcc = 'bcc2@mail.address'; 7 my $smtp = Net::SMTP->new($ServerName, Debug => 0); 8 $smtp->mail($from); 9 $smtp->to($to); 10 $smtp->bcc($bcc, $anotherbcc, $onemorebcc); 11 # to ( ADDRESS [, ADDRESS [...]] ) 12 # cc ( ADDRESS [, ADDRESS [...]] ) 13 # bcc ( ADDRESS [, ADDRESS [...]] ) 14 $smtp->data(); 15 $smtp->datasend("From: $from\n"); 16 $smtp->datasend("To: $to\n"); 17 my $SUBJECT = "日本語タイトル"; 18 my $body = "日本語本文\n"; 19 Encode::from_to($SUBJECT, "utf8", "iso-2022-jp"); 20 Encode::from_to($body, "utf8", "iso-2022-jp"); 21 $smtp->datasend("Subject: ".$SUBJECT."\n"); 22 $smtp->datasend("MIME-Version: 1.0\n"); 23 $smtp->datasend("Content-Type: text/html; charset=iso-2022-jp\n"); 24 $smtp->datasend("\n"); 25 $smtp->datasend($body); 26 $smtp->dataend(); 27 $smtp->quit; 10行目の通り、メールアドレスを羅列して渡すとメールは配信されます。 メールアドレスを配列渡し( @bccarray=('bcc0@mail.address', ・・・); で@bccarrayを渡す)と配信されません。 これを関数化し、bccアドレスの数を可変にしたいのですが良い方法はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • cgiメールの文字変換がうまくできない

    CGIメールです。 元々shiftjisなので、これをiso-2022-jpに変換させようとしてます。 $charset = "iso-2022-jp"; open(MAIL,"| $sendmail -t") || &error("失敗"); print MAIL "To: <$to>\n"; print MAIL "From: <$from>\n"; &jis("タイトル"); &base64("$msg"); print MAIL "Subject: $str\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=$charset\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; foreach ( split(/\n/, $body) ) { &jis("$_"); print MAIL $_, "\n"; } close(MAIL); sub jis{ $msg = $_[0]; Encode::from_to($msg, "shiftjis", $charset); ####1#### } sub base64 { use MIME::Base64; $str = $_[0]; if($str =~ /[^!-~\s]/){ $str = encode_base64($str, ""); if($charset eq "utf8"){ $str = '=?utf-8?B?' . $str . '?='; }else{ $str = '=?iso-2022-jp?B?' . $str . '?='; } } } このようにしてみたのですが、タイトル部分はきちんと表示されるのですが、ボディー部分が文字化けしてしまいます。(メーラーで手動にてshit-jisにエンコードしたらボディー部分が読めタイトル部分は文字化けする) Encode::from_to($msg, "shiftjis", $charset); の$charsetを"$charset"にしても同じ現象です また、元々参考にしたものでは####1####に retern $msg; があったのですが、これを入れるとsyntax errorになったので、これをコメントアウトしたらエラーにはならず送信そのものはできました ただ目的の文字変換ができないのですが、どこをどう改善すればいいでしょうか。 どうかご存じの方ぜひ教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 回答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

  • Perl メールフォーム

    Perl勉強中です。ご教示お願いします。 #!/usr/bin/perl -w use Encode qw(from_to encode); use Net::SMTP; use strict; my $from = 'xxxx@xxxxx.jp'; my $mailto= 'xxxx@xxxxx.jp'; my $mailcc= 'xxxx@xxxxx.jp'; my $subject = 'ホームページからのお問い合わせ'; from_to($subject, 'shiftjis', 'iso-2022-jp'); encode('MIME-Header-ISO_2022_JP', $subject); my $header = << "MAILHEADER"; From: $from To: $mailto CC: $mailcc Subject: $subject Mime-Version: 1.0 Content-Type: text/plain; charset = 'ISO-2022-JP" Content-Trensfer-Encoding: 7bit MAILHEADER my $message = "テスト"; from_to($message, 'shiftjis', 'iso-2022-jp'); my $smtp = Net::SMTP->new('xxxx-xxxx.jp'); if ( !$smtp ) { print "メールサーバーにアクセスできません!"; exit; } #メール送信 $smtp->mail($from); $smtp->to($mailto); $smtp->to($mailcc); $smtp->data(); $smtp->datasend($header); $smtp->datasend($message); $smtp->dataend(); $smtp->quit; 現在ここまでできています。 「ホームページ→お問い合わせクリック→メール送信」 そして、今回教えていただきたいのが、 イメージなのですが、 ホームページ→お問い合わせクリック→メールフォームのページに移動→内容入力 →確認ボタンクリック→確認画面→送信ボタンクリック→送信+送ってきた人へ自動返信(定型文) という風にしたいのですが、どうすればいいのかわかりません・・・ できればコードを教えて頂ければ嬉しいです。

    • ベストアンサー
    • Perl
  • smtpでメール送信

    いつもお世話になっております。 mail()、mb_send_mail() が使用できないため、smtp から 直接メール送信をしようと考えております。 (なぜ、mail()、mb_send_mail() が使用できないのかはわかりません。) // 件名 $subject = mb_convert_encoding($subject, "JIS", "EUC-JP"); $subject = '=?iso-2022-jp?B?' . base64_encode($subject) . '?='; // 本文 $msg = mb_convert_encoding($msg, "JIS", "EUC-JP"); // 送信 $fp = fsockopen('localhost', 25, $err_str, $err_no, 5); $header = "From: " . $from . "\r\n"; $header .= "To: " . $to . "\r\n"; $header .= "Reply-To: " . $from . "\r\n"; $header .= "Subject: " . $subject . "\r\n"; $header .= "Mime-Version: 1.0\r\n"; $header .= "Content-Type: Text/Plain; charset=iso-2022-jp\r\n"; $header .= "Content-Transfer-Encoding: 7bit\r\n"; fputs($fp, "HELO " . $smtp . "\r\n" ); fputs($fp, "MAIL FROM:" . $from . "\r\n"); fputs($fp, "RCPT TO:" . $to . "\r\n"); fputs($fp, "DATA \r\n"); fputs($fp, $header . $msg . "\r\n.\r\n"); fputs($fp, "QUIT \r\n"); 上記のように書きました。 一回目は送信できるのですが、二回目以降が送信できません。 サーバを再起動するとまた送信できるようになるのですが、 二回目以降はやはり送信できません。 何か原因が考えられますでしょうか。 ご教示よろしくお願いいたします。

    • 締切済み
    • PHP
  • 今更ながらdbmopenでutf8環境にハマってます。

    今更ながらdbmopenでutf8環境にハマってます。 #!/usr/bin/perl use strict; use warnings; use utf8; use open ":utf8"; use open ":std"; my $key1='test'; my $key2='test2'; my $val1 = 'あああ'; my $val2 = 'いいい'; print "$key1 $val1\n"; print "$key2 $val2\n"; open(my$fh,">./utf8DB2"); print $fh "$val1\n"; print $fh "$val2\n"; close $fh; my %HASH; dbmopen(%HASH, 'utf8DB', 0666); #utf8::decode($val1) if utf8::is_utf8($val1); #utf8::decode($val2) if utf8::is_utf8($val2); #下記2行が無いとWide character in null operation at ... utf8::encode($val1)if utf8::is_utf8($val1); utf8::encode($val2)if utf8::is_utf8($val2); $HASH{$key1}="$val1"; $HASH{$key2}="$val2"; dbmclose(%HASH); my%DBM; dbmopen(%DBM,'utf8DB',0666); while ( my( $key , $val ) = each %DBM ){ #utf8::decode($val) if utf8::is_utf8($val); #utf8::encode($val) if utf8::is_utf8($val); print "key1 : $key 値 : $val\n" ; } foreach my$key ( keys( %DBM ) ) { #utf8::decode($DBM{$key}) if utf8::is_utf8($DBM{$key}); #utf8::encode($DBM{$key}) if utf8::is_utf8($DBM{$key}); print "key2 : $key 値 : $DBM{$key}\n"; } dbmclose(%DBM); 上記スクリプトを実行時、値を表示する際に文字化けしているのですが、これは、dbmopenで保存時既に文字化けしているのでしょうか、それとも表示する際、適切にエンコードorデコード出来てないから文字化けしているのでしょうか。 また、どのようにすれば解決可能かご教授願えませんでしょうか。 いっその事、DataDumperで保存し、読み出すように修正しようかとも思うのですが、tieに変更した場合も、同様に文字化けするのでしょうか・・ その辺りも含め、アドバイス他ご教授願えますと助かります。

    • ベストアンサー
    • Perl
  • Perl メール文字化け

    #メール本体設定 my $start = '&#65374;ホームページより以下の内容を受け取りました&#65374;'; my $Name =$q->param('Name'); if($Name eq ""){ print "Content-type: text/plain; charset=Shift_JIS\n\n"; print "名前が入力されていません。\n\nブラウザの戻るボタンで戻ってください。"; exit(1); } my $Sex =$q->param('q1'); my $Age =$q->param('q2'); my $ie =$q->param('ie'); my $Tell =$q->param('Tell'); my $body = $q->param('body'); if($body eq ""){ print "Content-type: text/plain; charset=Shift_JIS\n\n"; print "本文が入力されていません。\n\nブラウザの戻るボタンで戻ってください。"; exit(1); } #my $subject = $q->param('subject'); my $End = '&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;&#65374;'; #メール送信オブジェクト設定 my $smtp = Net::SMTP->new('n-doboku.jp'); if ( !$smtp ) { print "メールサーバーにアクセスできません!"; exit; } #メール文字コード変換 Encode::from_to($start, 'shiftjis', 'iso-2022-jp'); Encode::from_to($Name, 'utf8', 'shiftjis'); Encode::from_to($Sex, 'utf8', 'shiftjis'); Encode::from_to($Age, 'utf8', 'shiftjis'); Encode::from_to($ie, 'utf8', 'shiftjis'); Encode::from_to($Tell, 'utf8', 'shiftjis'); Encode::from_to($body, 'utf8', 'shiftjis'); Encode::from_to($End, 'shiftjis', 'iso-2022-jp'); #メール送信 $smtp->mail($from); $smtp->to($mailto); $smtp->to($mailcc); $smtp->data(); $smtp->datasend($header); $smtp->datasend("$start\n\n"); $smtp->datasend("名   前 : $Name\n\n"); $smtp->datasend("性   別 : $Sex\n\n"); $smtp->datasend("年   齢 : $Age\n\n"); $smtp->datasend("住   所 : $ie\n\n"); $smtp->datasend("電話番号 : $Tell\n\n"); $smtp->datasend("本   文 : $body\n\n"); $smtp->datasend("$End\n\n"); $smtp->dataend(); $smtp->quit; 現在、 SMTPを使用しメール送信を作成している最中です。 やっと、パソコンからパソコンへメール送信では文字化けしなくなったのですが まず (1)パソコンでも異字体などは文字化けしてしまう(&#39641;や&#64017;等) おそらく「Content-Transfer-Encoding: 8bit」これを使うのですが、使いかたがわからないです・・・ (2)スマホにメール送信したときはすべて文字化けしてしまうのですが、 スマホでの文字コードとはなんなのでしょうか・・・? また、一回utf8に変換しているのですが、この場合どうするのでしょうか・・・?

    • ベストアンサー
    • Perl
  • Mail::Sendmailの使い方

    お世話になっております。 先日よりsendmailの調子がおかしくていろいろ調べているのですが煮詰まってしまったので詳しい方々にご教授頂きたいと思います。 先日よりMovable Type(CMS)でのメール送信のシステムが機能しなくなり、いろいろ調べているとサーバーのsendmailはきちんと機能しているのですが、perlのモジュールMail::Sendmailがうまく作動していないようなのです。 perlでは、 open (SENDMAIL, "/usr/lib/sendmail -t -i"); (中省略) close(SENDMAIL); という原始的な方法ではメールが送信されるのですが、 use Mail::Sendmail;という使い方では、エラーにはなりませんがずっと読み込み中…状態が続いてメールが送信されませんでした。 Movable TypeでもMail::Sendmailが利用されていますのでここが原因かと思いますが、Mail::Sendmailを使用するにあたって注意すべきこと、または設定すべきことはどのようなことがあるでしょうか?さしあたりどこをチェックしてよいのかわからなくて困っています。 よろしくお願いします。 Mail::Sendmailを利用して作成したスクリプトは以下のようなものです。 #!/usr/bin/perl use strict; use warnings; use Mail::Sendmail; use Encode; use utf8; my $subject = "テスト"; my $message = "テストです。ほげほげ。"; $subject = encode("MIME-Header-ISO_2022_JP", $subject); $message = encode("iso-2022-jp", $message); my %mail = ( "Content-Type" => 'text/plain; charset="iso-2022-jp"', To => 'to@example.com', From => 'from@example.com', Subject => $subject, Message => $message, ); sendmail(%mail); exit;

    • ベストアンサー
    • Perl
  • 文字コードの変換(Shift-JISからUTF8)

    文字コードがShift-JISのCSVファイルを読み込み、UTF-8のテキストファイルに出力するのに プログラムの中で変更しようとしているのですが、うまくいきません。出力ファイルの文字コードを 確認するとShift-JISのままです。 どなたか教えていただけないでしょうか? ActivePerl v5.16.0を使用し、Encodeモジュールのfrom_toを使用しています。 #!/usr/bin/perl use strict; use warnings; use utf8; use Encode; my $input_file="input.csv"; my $output_file="output.txt"; open (IN, $input_file) or die "$!"; open (OUT, ">$output_file") or die "$!"; while (<IN>){ chomp ($_); my @data=split(/,/,$_); for(my $i=0;$i<@data;$i++){ $data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換 $data[$i]=~s/\s+//g; print OUT $_; } print OUT "\n"; } close (IN); close (OUT);

    • ベストアンサー
    • Perl
  • Perlでのメール添付送信のエラー

    PerlでメールにZIPファイルを添付して送信したいです。 http://homepage3.nifty.com/hippo2000/perltips/perlmail.htm#1.2 http://perltips.twinkle.cc/perl/mail_mime_attached_file.php 上記のサイトを参考に以下のプログラムを組んでみました。 するとエラーメッセージが画像のような感じででてきました。 おそらく、なんか文字コードがおかしいのかもしれないのですが、どこから手をつけていいのかわかりません。 どなたかお助け下さいm(__)m 前回も別の問題で助けていただいたのですが、文字コードの問題でした。他の部分は全くひっかからないのに、この部分で40時間ほど悩んでおります・゜・(ノД`;)・゜・ ======================================== sub mail_push { # サーバー、アカウント、パスワード、ポート、送信元アドレス、送信先アドレス、題名、本文、送るべきファイル1(空の場合は無視)、送るべきファイル2(空の場合は無視) my ( $mailhost, $mail_username, $mail_password, $mailport, $from_mail, $to_mail, $subject, $message, $file1, $file2 ) = @_; # 正しいメールの形なのか調べる if ( $to_mail eq '' ) { print "送り先のメールアドレスが空のようです\n"; # ERR } elsif ( $to_mail =~ /^([a-zA-Z0-9\.\-\/_]{1,})@([a-zA-Z0-9\.\-\/_]{1,})\.([a-zA-Z0-9\.\-\/_]{1,})$/ ) { # 実際に送る my $smtp = Net::SMTP->new($mailhost, Port => $mailport); $smtp->auth($mail_username, $mail_password); $smtp->mail($from_mail); $smtp->to($to_mail); $smtp->data(); my $mime = MIME::Entity->build( Type => 'multipart/related', From => $from_mail, To => $to_mail, Subject => $subject, Type => 'text/plain;charset="iso-2022-jp"', Data => $message, Encoding => "7bit"); # エラーがでてくる箇所 $mime->attach( Path   => 'c:/buromaga1.jpg', Type   => 'Application/octet-stream', Encoding => 'Base64',); $smtp->datasend($mime->stringify);# ERR $smtp->dataend();# ERR # SMTP終了 $smtp->quit; } else { print "送り先が正しいメールの形式ではありません\n"; # ERR } }

    • ベストアンサー
    • Perl
  • メール送信で文字化け

    メール送信で件名が文字化けしてしまいます。 カテゴリ内には同様の質問もあるようですが、 解決できないので、投稿しました。 以下のようなコードです。 $to= "aa@aa.aa"; $from= "bb@bb.bb"; $subject= "メール送信テスト"; $headers= "From:$from"; $subject = i18n_mime_header_encode(i18n_convert($subject, "JIS")); $name= $_POST["name"]; $sub= $_POST["sub"]; $body= $_POST["body"]; $message="$name \n $sub \n $body \n"; if(mail($to, $subject, $message,$headers)){ echo "送信完了"; }else{ echo "送信エラー"; } ちなみに、 $subject= base64_encode($subject); とかもやってみたけど駄目でした。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • CGIでメール送信で件名文字化け

    CGIにてメールを送信しています。 Beckyや一部のWEBメーラーで見ると、本文も件名も正常表示されますが、一部のWEBメーラー(Chicappa)では件名のみ文字化けします。 例えば件名が「お問い合わせの受付」の場合 「 $B$*Ld$$9g$o$;$N<uIU (B」となります。 困っています。原因を教えてください。 ソースはutf8で保存しています。 use utf8; use MIME::Lite; use Jcode; my $msg = MIME::Lite->new( From => $mail_from, To => $mail_to, Subject => jcode("お問い合わせの受付")->jis, Type => 'multipart/mixed', ); $msg->attach( Type => 'image/jpeg', Path => "./picture.jpg", ); $msg->attach( Type => 'text/plain; charset="iso-2022-jp"', Data => jcode($mail_body)->jis ); $msg->send();

  • Perl メール フォーム

    ホームページのメールフォームについて教えてください。 現在ホームページで、お問い合わせページを作っている最中です。 そこで、現在下記のコードまでできております。 #!/usr/bin/perl -w use Encode qw(from_to encode); use Net::SMTP; use strict; use warnings; use Encode; use CGI; my $p = new CGI; #メールアドレス設定 my $from = 'aaaa@aaaaa.jp; my $mailto= 'aaaa@aaaaa.jp; my $mailcc= 'aaaa@aaaaa.jp; #サブジェクト設定 my $subject = 'ホームページからのお問い合わせ'; from_to($subject, 'shiftjis', 'iso-2022-jp'); encode('MIME-Header-ISO_2022_JP', $subject); #メールヘッダー設定 my $header = << "MAILHEADER"; From: $from To: $mailto CC: $mailcc Subject: $subject Mime-Version: 1.0 Content-Type: text/plain; charset = 'ISO-2022-JP" Content-Trensfer-Encoding: 7bit MAILHEADER #メール本体設定 my $message = "a"; #my $subject = $p->param('subject'); #文字コードをJISに変換 from_to($message, 'shiftjis', 'iso-2022-jp'); #メール送信オブジェクト設定 my $smtp = Net::SMTP->new('aaaaaaa.jp'); if ( !$smtp ) { print "メールサーバーにアクセスできません!"; exit; } #メール送信 $smtp->mail($from); $smtp->to($mailto); $smtp->to($mailcc); $smtp->data(); $smtp->datasend($header); $smtp->datasend($message); $smtp->dataend(); $smtp->quit; これだと、ホームページのボタン等をクリックすると メールは送られます。 差出人が'aaaa@aaaaa.jp 件名がホームページからのお問い合わせ 内容がa です。 これは、コード内にこう書いているから必然的にこれがくるわけなのですが、 そうではなく、 ホームページでお問い合わせボタンがありそこに <a href="http://aaaaaa.jp/cgi/mailform.pl"><img src="img/share/mail.gif" width="100" height="50" alt=""></a> mailform.plもしくはmeilform.htmlを表示させ下記のコードで表示されるページにアクセスし #!/usr/bin/perl <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>メールフォーム</title> </head> <body> <h1 class="title">メールフォーム</h1> <form method="post" action="mail.pl"> <input type="hidden" name="a" value="exec"> 件名(Subject) :<br /> <input type="text" name="subject" size="80" value=""><br /> 宛先(To) :<br /> <input type="text" name="to" size="80" value=""><br /> 差出人(From) :<br /> <input type="text" name="from" size="80" value=""><br /> 本文(Body) :<br /> <textarea name="body" rows="10" cols="65"></textarea><br /> <p> <input type="submit" value="送信"> </p> </form> </body> </html> ここで 差出人、件名、内容を入力し、送信のボタンを押すと my $subject = 'ホームページからのお問い合わせ'; my $message = "a"; my $from = 'aaaa@aaaaa.jp; この3つをmailform.plもしくはmailperl.htmlで 入力した内容で送信をしたいのですが、 これのやり方を教えてほしいです。。。 当方ホームページ作りも初心者で、Perlも最近はじめたとこでまだ理解できていないとこも 多いため説明がわかりにくいかもしれません・・・ その時は、ご指摘ください;; また、業者に頼むことは考えておりません・・・ 参考書やいろいろネットサーフィンしてみたのですが、上手くできません どうかお力添えをお願い致します!

    • ベストアンサー
    • Perl