• 締切済み

sendmail実行時のエラー

受け渡されたパラメーターをセットしてsendmailを実行すると「Premature end of script headers:」というエラーになります。 試しにパラメーターを直セットしてsendmailすると、文字化けはしますが送信はされました。 メールでなく、ファイルに出力してみたところ、 From: " =?ISO-2022-JP?B?GyRCJDUkRiQ1JEYbKEI=?= "<xxxx@xxxx.ne.jp> Subject: =?ISO-2022-JP?B?GyRCIXo7cU5BQEE1YRsoQg==?= この2つだけが文字化けしていて、本文は大丈夫でした。 ソースは以下の通りです。 require './jcode.pl'; # MIMEエンコードライブラリを使う $mimew = './mimew.pl'; ・・・・・略 # MIMEエンコード if (-e $mimew) { require $mimew; $subject = &mimeencode($mail_sub); $from = &mimeencode("From: \"$in{'cname'}\" <$in{'mail'}>"); } else { $subject = $mail_sub; &jcode'convert(*subject,'jis'); $from = "From: $in{'mail'}"; } ・・・・パラメータのコンバート&jcode'convert(データ, 'jis'); ・・・・メール本文($mail_body)のセット $err = 0; open(MAIL,"| $sendmail -t") || $err = 1; print MAIL "To: $mailto\n"; print MAIL $from, "\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n\n"; print MAIL "$mail_body\n"; close(MAIL); 文字化けもですが、まずはエラーを解消するにはどうしたらいいでしょうか。教えて下さい。お願いします。

  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • t140
  • ベストアンサー率39% (59/150)
回答No.1

From: " =?ISO-2022-JP?B?GyRCJDUkRiQ1JEYbKEI=?= Subject: =?ISO-2022-JP?B?GyRCIXo7cU5BQEE1YRsoQg==?= これは文字化けではなく、正しくBASE64エンコードされて います。 日本語が送信者や件名に含まれる場合にJISコードをBASE64 にエンコードして送信することで文字化け(先頭ビットの 欠落)を防ぐ仕組みです。 で、「Premature end of script headers:」というエラー に関してですが、Web上からのメール送信などで処理後に 表示されるページがない可能性が考えられます。 「Content-Type: text/html\n\n」のようなヘッダと 「メール送信完了!」みたいなページ内容が無いとか・・・

arisa5
質問者

お礼

お答えいただき、ありがとうございます。 とことんいじくりまわしていたら、なぜか送信できるようになりました。 正直なところ、原因が何なのか分かっていませんが。 前の状態でもエンコードは正常だったのですね。ありがとうございました。

関連するQ&A

  • sendmailで本文が文字化けします

    sendmailを使ってメールを送信していますが、下記処理中で、charsetの指定を入れないと本文は文字化けしないのですが、指定を入れると文字化けしてしまいます。 ※ちなみに、OutlookExpressはどの場合でも文字化けしないで受信できました。 どなたかご存知のかた教えていただけないでしょうか。 ソースは以下のような感じです。 require "/XXX/jcode.pl";# 文字列変換 require "/XXX/mimew.pl";# MIME エンコード # メールHEADER作成 $head = "From: $FromUser\n"; $head .= "To: $ToUser\n"; $head .= "Subject: $Subject\n"; $head .= "Mime-Version: 1.0\n"; $head .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $head .= "Content-Transfer-Encoding: 7bit\n"; $head .= "\n"; # JISコード変換 $code = &jcode'convert(*head, 'jis'); # エンコード $header = &mimeencode($head); # メール本文作成 $body = "メール送信のテストです\n"; $code = &jcode'convert(*body, 'jis'); if (open(MAIL,"|/usr/lib/sendmail -f $FromUser $ToUser")){ print MAIL $header; print MAIL $body; print MAIL "\n\n"; close(MAIL); }

  • Perlにて、sendmailを使用するがエラー…

    はじめまして、初めて質問させて頂きます、ぷりんと申します。 早速ですが、質問です。 私はPerlにてメールフォームの作成に勤しんでいるのですが、どうしても500エラーが出てしまいます。 サーバーはレンタルサーバーのロリポップを使用しております。 私が不思議に思うのは、メール自体は送信されますが、ページには500エラーと表示されてしまうことです。 以下は実際のコードです。(全文)(一部変更有(メール宛先部分)) #!/usr/bin/perl require "../mimew.pl"; require "../jcode.pl"; $sendmail = '/usr/lib/sendmail'; $to = "hogemoge\@gmail.com"; $from = "test\@test.tet"; $subject = "題"; $body = "メール本文"; # 本文をJISコードへ変換 &jcode'convert(*body,'jis'); # 標題をJISコードへ変換してMIME エンコード &jcode'convert(*subject,'jis'); $subject = mimeencode($subject); open(MAIL,"| $sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "\n"; print MAIL "$body\n"; close(MAIL); exit(0); と記述し、こちらのcgiファイルはパーミッション700(ロリポップさんが700で動くので)、アスキーコードでアップロード。 mimew.plとjcode.plどちらも一つ上のフォルダにあります。(パーミッションは644) 以上です。 当方初心者ですので、いろいろ試したのですが、どちらが悪いのか見当つきません・・。 簡単な検索をしましたが、Syntax Errorは見つかりませんでした。 また、いろいろなサイトを参考にしたり、検索したりしましたが、問題解決には至りませんでした。 おそらく初歩的なミスだとは思います・・。 こちらの問題に関してお詳しい方、どうかお手を差し伸べていただけないでしょうか。 何卒、よろしくお願い申し上げます。

    • ベストアンサー
    • Perl
  • sendmailで送信すると、迷惑メールになります

    フォームに入力された内容をperlでsendmailを使って送信すると、ウイルス対策ソフトの判定で、迷惑メールに入ってしまいます。 ▼プログラム $subject = 'テストメール'; $msg = "------------------------------------------------------------------ [名前] $name [住所] $address ------------------------------------------------------------------"; # subjectをBase64エンコード jcode::convert(\$subject, 'euc'); jcode::convert(\$subject, 'jis', 'euc', 'z'); $subject = '=?ISO-2022-JP?B?' . encode_base64($subject, '') . '?='; # 本文をJISに変換 jcode::convert(\$msg, 'jis'); &mail($to_mail, $from_mail, $subject, $msg); ▼サブルーチン sub mail{ my($to_mail, $from_mail, $subject, $msg) = @_; # sendmailによるメール発信 my $sendmail = '/usr/lib/sendmail'; # sendmailパス open(MAIL,"| $sendmail -t") || &error("メール送信に失敗しました"); print MAIL "To: $to_mail\n"; print MAIL "From: $from_mail\n"; print MAIL "Subject: $subject\n"; print MAIL "X-Mailer: Mail Form Sendmail\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-type: text/plain; charset=\"iso-2022-jp\"\n"; print MAIL "MIME-Version: 1.0\n\n"; print MAIL "$msg"; close(MAIL); } print MAIL "Content-type: text/plain; charset=\"iso-2022-jp\"\n"; を print MAIL "Content-type: text/plain;\n"; にすれば迷惑メールにならずに済むのですが、一部の利用者(特にMacユーザー)で、送信されたメールが文字化けしているようですので、何とかcharsetの指定も入れたいと思っています。 上記のプログラムで、おかしいところがあるでしょうか? どうか、ご教示いただけますよう、よろしくお願いします。

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

    Perl5.8からsendmailを使ってメール送信しています。 髙や﨑が入ると文字化けします。文字化けしないようにする方法を教えてください。 #!/usr/bin/perl require 'jcode.pl'; require 'mimew.pl'; $sendmail = '/usr/lib/sendmail'; print"Content-type: text/html\n\n test\n"; if (!(open(OUT,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; } print OUT "To: xxxx\@hogehoge.co.jp\n"; print OUT "From: xxxx\@hogehoge.co.jp\n"; print OUT "Reply-To: xxxx\@hogehoge.co.jp\n"; $subject = "サブジェクト 髙﨑"; $subject = &mimeencode($mail_subject); print OUT "Subject: $mail_subject\n"; print OUT "Mime-version: 1.0\n"; print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n"; print OUT "Content-Transfer-Encoding: 7bit\n\n"; $honbun = "メール本文 髙﨑"; &jcode'convert(*honbun, 'jis'); print OUT "$honbun\n"; close(OUT);

    • ベストアンサー
    • Perl
  • sendmailについて

    CGIからサーバにあるsendmailを使おうとしているのですが、分からない点があります。 メール自体は、きちんと送信されるのですが、To以外のヘッダーが本文と一緒に送信されてしまいます。 メールの送信者欄と件名欄が空白になってしまい困ってます。分かる人がいましたら教えてください。 下記がソースです。 &jcode'convert(*subject,'jis'); &jcode'convert(*message,'jis'); open(MAIL,"|$sendmail -t -f $master_mail"); print MAIL "To: $mail\n"; print MAIL "From: $master_mail\n"; print MAIL "Subject: $subject\n"; print MAIL "Contnt-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n\n"; print MAIL "$message\n"; close(MAIL);

    • ベストアンサー
    • Perl
  • sendmailのFROMに日本語を使う

    CGIからsedmailを呼び出してメールを送信しています。 その時に差出人の部分の日本語が文字化けしてしまいます。 そこで&jcode'convertでjisに変えたのですが、今度は CGIがサーバーエラーになってしまいます。 どうすればよいでしょうか。 スクリプトはこんな感じです。 ----------------------------------------------- $from = '両国'; $subject = 'テスト'; &jcode'convert(*from, 'jis'); &jcode'convert(*subject, 'jis'); &jcode'convert(*msg, 'jis'); $errno = 1 unless open(MAIL, "| /usr/lib/sendmail -t"); return 0 if $errno; print MAIL "To: $MailTo\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "$msg\n"; $errno = 2 unless close(MAIL); return 0 if $errno;

    • ベストアンサー
    • Perl
  • メールヘッダのMIMEエンコードについて

    今、CGIでメールを送信するフォームを作成しているます。 日本語のsubjectを使う場合はMIMEエンコードをしなければいけないと聞いてmime_plsというライブラリで試してみたのですが、受信した結果、「1月1日」→「1 月 1 日」のように半角数字と全角文字の間にスペースが入ってしまいます。 これはどうしたらよいのでしょうか。 コードは以下のように書いています。 $mon = substr($reserveday, 4, 2); $day = substr($reserveday, 6, 2); $subject = sprintf("%d月%d日の件について", $mon, $day); &Jcode::convert(\$subject, 'jis'); $from = &mimeencode($from); $to = &mimeencode($to); $subject = &mimeencode($subject); $contents .= "本文"; &Jcode::convert(\$contents, 'jis'); my $send_buf=''; $send_buf .= "From: $from\n"; $send_buf .= "To: $to\n"; $send_buf .= "Subject: $subject\n"; $send_buf .= "Content-Type: text/plain; charset=iso-2022-jp\n"; $send_buf .= "Content-Transfer-Encoding: 7bit\n"; $send_buf .= "Mime-Version: 1.0\n"; $send_buf .= "\n"; $send_buf .= $contents; # メール送信 open(MAIL,"| $sendmail -t -i -f $from"); print MAIL $send_buf; close(MAIL); よろしくお願いします。

    • ベストアンサー
    • Perl
  • sendmailからblatjへ

    初めまして。 今cgiフォームメールがあるのですが、sendmail用で使われています。これをBlatjにソースを変えることはできるのでしょうか?cgi,perlは難しく、誰か教えて頂けないでしょうか?宜しくお願いします。 ソースは以下です。 sub _Send_mail { my ($fromaddress, $toaddress, $subject, $body) = @_; $fromaddress =~ s/\n//g; $fromaddress =~ s/\r//g; $toaddress =~ s/\n//g; $toaddress =~ s/\r//g; $toname =~ s/\n//g; $toname =~ s/\r//g; $subject =~ s/\n//g; $subject =~ s/\r//g; # $subject = encode("cp932", decode("utf-8", $subject)); # $body = encode("cp932", decode("utf-8", $body)); if($moji_code eq "UTF-8"){ $subject = Unicode::Japanese->new($subject)->sjis; $body = Unicode::Japanese->new($body)->sjis; $toaddress = Unicode::Japanese->new($toaddress)->sjis; } open(SENDMAIL, "|/usr/sbin/sendmail -t"); my $str = Jcode->new("From: $fromaddress\n")->mime_encode; $str .= Jcode->new("To: $toaddress\n")->mime_encode; $str .= Jcode->new("Subject: $subject\n")->mime_encode; $str .= "MIME-Version: 1.0\n"; $str .= "Content-Type: text/plain;charset=\"ISO-2022-JP\"\n"; print SENDMAIL $str; print SENDMAIL Jcode->new("$body")->jis; close(SENDMAIL); } __END__

    • 締切済み
    • CGI
  • sendmailで送信の時に文字化け

    皆さんお世話になります sendmailを使用してメール送信しています 送信はちゃんと出来て、WEB上のメールで見る限り 問題は無いのですが、アウトルックエクスプレスで 受信すると文字化けしてしまいます。 #// メール送信 # print MAIL $mlms; # require './jcode.pl'; jcode'convert(*mlsb, "jis"); jcode'convert(*mail_msg, 'jis'); $mlhd = "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n"; # Err check $err = 1; if ($mlms cmp "" && $mlfr cmp ""){$err = 0} open(MAIL, "| $mailer -t") or $err = 1; if ($err == 0) { print MAIL $mlhd; print MAIL "\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL 'Content-Type: text/plain; charset=iso-2022-jp' . "\n\n"; print MAIL $mail_msg; print MAIL "\n\n" . "." . "\n"; close(MAIL); プロバイダはwakwakです 何か足りない物があるような気がします よろしくご指導お願いします。

    • ベストアンサー
    • CGI
  • ホームページから意見を送るsendmailのcgiスクリプト

    表題のようなスクリプトを使っているのですが、 普通は特に問題ないのですが、「http://」などから始まる URLのみを書き込んで送ると、空メール(何も記載されない)となって 届いてしまいます。どこがおかしいのかわかりません。 以下のようなスクリプトです。 @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); if ($name eq 'to') { $to = $value; } if ($name eq 'from') { $from = $value; } if ($name eq 'subject') { $subject = $value; } if ($name eq 'body') { $body = $value; } } # cheack if ($from eq "") { $from = "unknown\@."; } if ($from eq " ") { $from = "unknown\@."; } # send mail &jcode'convert(*from,'jis'); &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); if (!(open(MAIL,"| $sendmail -t"))) { &error('システムエラー','メールの送信に失敗しました。'); } print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain; charset=iso-2022-jp\n"; print MAIL "$body\n"; close(MAIL); # view html &jcode'convert(*from,'sjis'); &jcode'convert(*subject,'sjis'); &jcode'convert(*body,'sjis'); $body =~ s/\r\n/\r/g; $body =~ s/\n/\r/g; $body =~ s/\r/<BR>/g;

    • ベストアンサー
    • CGI

専門家に質問してみよう