• 締切済み

sendmailができない

(1)お問い合わせフォームを入力(2)入力データを確認する(3)最後に指定先のメールに送り終了 という具合ですが(3)のところで指定先にメールが届きません。メール自体も送られてこないのですがどのような方法があるのでしょうか?どうか教えていただけないでしょうか?お願いします。 (3)のソースコートです。------------- &header; open (KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # ファイルの内容を1行単位ですべて配列allに読み込む @all = <KEIJI>; split(/:/, $_); if( $_ = $all[0] ){ ($time, $name, $mail, $title, $message, $to) = split(/:/); #送信前処理 &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); # send mail open(MAIL, "| /usr/lib/sendmail -t"); print MAIL "TO: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "\n"; print MAIL "---------------------------------------------\n"; print MAIL " 名前:$name\n"; print MAIL " 内容:$body\n"; print MAIL " お名前:$firstname $secondname\n"; print MAIL " かな:$kanafirstname $kanasecondname\n"; print MAIL " 所在都道府県 :$area1 $area2\n"; print MAIL " 電話番号:$telno\n"; print MAIL " 性別:$sex\n"; print MAIL " メールアドレス:mailto:$mailad\n"; print MAIL "お問合わ、ご相談内容:"; print MAIL " $con1\n"; print MAIL "---------------------------------------------\n"; close(MAIL); &one_message; } close(KEIJI); # フッターを表示するサブルーチン &footer;

  • gcc
  • お礼率8% (10/125)
  • Perl
  • 回答数4
  • ありがとう数4

みんなの回答

  • Tmen
  • ベストアンサー率0% (0/1)
回答No.4

単純にパイプでメール送信するのであれば、 #!/usr/bin/perl $from = "hoge\@hogehoge.hoge"; $to = "hoge\@hogehoge.hoge"; open MAIL, "|nkf -j -m0| /usr/sbin/sendmail -f $from -t $to"; print MAIL "From: $from\n"; print MAIL "Subject: This is a test mail.\n"; print MAIL "To: $to\n"; print MAIL "\n"; print MAIL "ほげほげ\n"; close MAIL; のようにすれば送れます。 どこが抜けていたかはご覧になればご覧になればわかると思います。 まあ、Fookeyさんの仰るとおりsendmailが正常に動作していればの話ですが。

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.3

> &jcode'convert(*subject,'jis'); > &jcode'convert(*body,'jis'); $subject と $body はどこから沸いたのでしょう?

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.2

まず、そのマシン上のsendmailの設定は済んでいて、 いつもそのsendmailを介してメールが送れていますか? それができていないなら、当然、perlからメールを 送ることもできません。 未確認なら、mailコマンドなどで、メールがきちんと 送れることを確認して下さい。 prompt> mail -s TEST_MAIL yourname@your.mail.host.ne.jp とやると、メールの本文入力モードになるので、 本文を入力して、Ctrl-Dを押します。それで yourname@...にメールが届けば、sendmailは ちゃんと動いてます。 以上の確認をしたか、あるいはいつもそのマシンのsendmailを 介してメールを送っていることが明らかなら、sendmailのログや 標準エラー出力をチェックするんですね。sendmailに-vオプションを 指定すれば、チェックモードになってメッセージがいっぱいでます。 ログは/var/log/maillogとか/var/log/syslog、/var/log/messagesに 入ってるはずです。標準エラーは、 open(MAIL, "| /usr/lib/sendmail -t -v >>& /tmp/sendmail-stderr.log") or die $!; などとして、/tmp/sendmail-stderr.log(名前はなんでもいいです けど)をチェックして下さい。原因を特定しないことには どうにもならないですから。 あと、私には直接sendmailを起動する意図がよく分らないです。 sendコマンドとかimputコマンドを使わないんですか? imputはメールの整形やヘッダのMIMEエンコード、JISへの変換など 勝手にやってくれますよ。さらには、CGIが動いてるローカル マシンではない、リモートサーバ上のsendmailを利用することも 可能です。その場合、同一組織内のサーバでない限り、はじかれますが。 ですから、ローカルマシンのsendmailがちゃんと設定されていない場合、 いつも利用している同一組織内の別のサーバ上のsendmailを 使った方が簡単です。 なお、imputを使うには、imパッケージがインストールされてないとダメです。 意地でもsendmailを使いたいなら、selenityさんが仰るように、 まだやることがあります。 1.ヘッダ部分のBase64エンコーディング   jcodeではなく、Jcodeパッケージを使って、   print MAIL "Subject: ", Jcode->new($subject)->mime_encode, "\n";   To:, From: なども同様。 2.print MAIL " 名前:$name\n"; の「名前」など、   変数以外の部分は確かにJISですか?   そんなに一生懸命JISへの変換をしなくても、   open(MAIL, "| nkf -j | /usr/lib/sendmail -t") or die $!;   とやって、nkfを噛ましてやれば、全部JISに変換してくれます。   nkfがインストールされてないようなら、インストールする   価値はあると思いますよ。 3.まあ、クリティカルな問題ではないですが、お行儀よくするなら、   Content-TypeとかMime-Versionとかのヘッダエントリも入れましょう。 最後に、細かいことですが、   open(FH, "....") || die $!; よりも、   open(FH, "....") or die $!; ですよね。open()のC記法をずっと遵守するなら 問題ないですが、そのうちにperlの手抜き記法に慣れて   open FH, "..." || die $!; とかやり出すと、優先順位の関係から、エラー検出が できなくなります。

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

perlはほとんど使ったことがないのでよくわかりませんが、このコードだとメールを送る送らない以前の問題があるようにみえます。 Mime関連の設定は --- "Content-Type: text/plain; charset=\"iso-2022-jp\"" "Content-Transfer-Encoding: 7bit" "Mime-Version: 1.0" --- と書くのが正式(?)ですし、 --- &jcode'convert(*subject,'jis'); print MAIL "Subject: $subject\n"; --- となっていますが、 print MAIL "Subject: $subject\n"; の$subjectの部分はMime-Encodeする必要があります。 To,Fromの部分に関しても日本語を使用しているのであれば、Mime-Encodeは必須です。 さらに --- &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); --- とJISに変換していても、肝心なメールの本文の部分はEUCまたは、Shift-JISのままなのではありませんか? だとすると、漢字コードが入り交じったメールが送信されませんか? 8bitコードが含まれているためsendmailが拒否している可能性はありませんか? このままでは受け取ったほうが迷惑します。 それとも最近のsendmailって勝手に漢字コードの変換を行ってくれるのでしょうか? 何事も基本が大切です。

関連するQ&A

  • 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
  • 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の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
  • Sendmailの文字化けについて

    以前にも同じ質問をしたのですが、いまいち解決していないので、もう一度質問させて頂きます。 ホームページで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');}

    • ベストアンサー
    • Perl
  • 単純なお問い合わせフォーム

    お問い合わせのフォームを作り、確認、最後にメールを飛ばす仕組みを作っているのですが、メールにインプットされたデータが入ってこない状態で届きます。どうか助けてください。(息切れ) *下記参照 #フォームの情報を初めに格納する所 省略 #-------------------------------↓ if ( $ACT eq 'ckt' ){ &kakunin; } elsif ( $ACT eq 'ckt2' ) { open (KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # ファイルの内容を1行単位ですべて配列allに読み込む @all = <KEIJI>; # すべてのデータについて繰り返す foreach (@all){ # 1行の文字列をコロンを目印にして項目に分割する ($firstname) = split(/:/, $_); # 1件分のデータを表示するサブルーチン &sendmail; } close(KEIJI); #------------------------------------↑ sub kakunin{ $new_data = "$firstname\n"; &jcode'convert(*new_data, 'sjis'); open(KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all_data = <KEIJI>; close(KEIJI); # 配列の先頭に新規データを追加 unshift(@all_data, $new_data); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; #flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all_data; #flock(KEIJI, 8); close(KEIJI); # 書きこみ完了メッセージ &write_ok; exit; } sub sendmail { #以下省略メール送信プログラム exit; }

    • 締切済み
    • CGI
  • 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にて、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
  • 【再】Cookieを使用してフォームで送信

    #!/usr/local/bin/perl # ライブラリ require 'cgi-lib.pl'; require 'jcode.pl'; require 'keiji_write_sub.pl'; # デコード &ReadParse(*form); # 名前・メッセージ欄のチェック if ($form{'name'} eq "" || $form{'message'} eq "") { # 名前・メッセージが空ならエラー &input_error; # 終了 exit; } else { # 名前・メッセージも空でないなら書込処理 # HTMLタグと衝突する記号を変換 $name = &henkan($form{'name'}); $mail = &henkan($form{'mail'}); $title = &henkan($form{'title'}); $message = &henkan($form{'message'}); $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得る $time = &jp_time; # データを1行に(区切りはコロン) $new_data = "$time:$name:$mail:$title:$message\n"; &jcode'convert(*new_data, 'sjis'); open(KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all_data = <KEIJI>; close(KEIJI); # 配列の先頭に新規データ追加 unshift(@all_data, $new_data); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; #flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all_data; #flock(KEIJI, 8); close(KEIJI); # 書込完了メッセ &write_ok; } というコードでdatファイルに書き込みしています。 この時に、名前などを1度入力したらCookieに記憶させて次からは自動で入るようにしたいのです。 あちこち検索して読んだりしたのですが、わからなくて…。 どなたか教えてください。

    • ベストアンサー
    • CGI
  • ファイルに書き込めない/ファイルの内容が消える

    編集機能を掲示板につけているところです。 テキストファイルの内容がまったく消えてしまうのです。 どうしてでしょうか? データ形式 314:2006年2月20日(月)22時31分:あああ:いいい:ううう 313:2006年2月20日(月)22時31分:あああ:いいい:ううう 312:2006年2月18日(土)23時18分:あああ:いいい:ううう #コード↓######################################## open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; @all = <KEIJI>; $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; #***** 文字列の置換 ***** $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得るサブルーチン $time = &jp_time if( $time eq '' ); # 重複があったら置き換えるルーチン foreach(@all){ $data = $_; chop $data; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); } push @all, $data; } die "File 'keijiban.dat' Open Error."; flock(KEIJI, 2); foreach (@all){ print KEIJI $_,"\n"; } flock(KEIJI, 8); close(KEIJI); ~~~~~~~~~~~~~~~~~~~~~~~~ どんどん手をつけていったら書きこめなくなってしまいました。最初は書き込めていたんですけど・・・。 真ん中あたりのじ「重複があったらおきかえるルーチン」を付け加えていたら書き込めなくなりました。書き込めたときはpushではなくunshiftを使っていました。

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