sendmail -fオプションの指定はどこで行えばいいでしょうか?

このQ&Aのポイント
  • sendmail -fオプションの指定方法について教えてください。
  • フリーのメールフォームCGIでsendmail -fオプションの設定を行いたいです。
  • 初期設定ファイルのsendmail_pathを変更する方法を教えてください。
回答を見る
  • ベストアンサー

sendmail -fオプションの指定はどこで行えばいいでしょうか?

キャノネットというサーバーでフリーのメールフォームCGI設置を試みました、-fと-tオプション設定を行わなければならないみたいなのですが、今回使用したいCGIの初期設定ファイルsendmail指定部分下記に #sendmailのパス $init->{sendmail_path} = '/usr/local/bin/sendmail -t -f ' メールアドレス' '; と指定しましたがCGIエラーとなってしまい、どうやらプログラム内を書き換える必要があるみたいなのですが、知識不足のため どうやって変更するのかがわからず困っております。 お詳しい方、下記のプログラム内の変更部分をお教え下さい。 よろしくお願い致します。 (CGIはURLのものを使用しております。) http://www.web-liberty.net/download/mailplus/index.html -------------------------------------------------- package webliberty::Sendmail; use strict; use Jcode; use webliberty::Encoder; ### コンストラクタ sub new { my $class = shift; my $self = { sendmail => shift, send_to => undef, send_from => undef, subject => undef, name => undef, message => undef, files => undef, x_mailer => undef }; bless $self, $class; return $self; } ### メール送信 sub sendmail { my $self = shift; my %args = @_; $self->{send_to} = $args{'send_to'}; $self->{send_from} = $args{'send_from'}; $self->{subject} = $args{'subject'}; $self->{name} = $args{'name'}; $self->{message} = $args{'message'}; $self->{files} = $args{'files'}; $self->{x_mailer} = $args{'x_mailer'}; if (!$self->{send_to}) { $self->{send_to} = 'example@example.com'; } if (!$self->{send_from}) { $self->{send_from} = 'example@example.com'; } if (!$self->{subject}) { $self->{subject} = 'No Subject'; } if (!$self->{message}) { $self->{message} = 'No Message'; } if (!$self->{x_mailer}) { $self->{x_mailer} = 'Web Liberty'; } foreach ($self->{subject}, $self->{name}, $self->{message}) { $_ =~ s/<br ?/>/?n/g; $_ =~ s/&amp;/&/g; $_ =~ s/&lt;/</g; $_ =~ s/&gt;/>/g; $_ =~ s/&quot;/"/g; } if ($self->{name}) { $self->{send_from} = "?"" . $self->_encode($self->{name}) . "?" <$self->{send_from}>"; } $self->{message} =~ s/?xEF?xBD?x9E/?xE3?x80?x9C/g; $self->{message} = Jcode->new($self->{message}, 'utf8')->jis; my @files = split(/?n/, $args{'files'}); my $boundary; if ($files[0]) { require webliberty::File; $boundary = time; while ($self->{message} =~ /$boundary/) { $boundary++; } } open(webliberty_Sendmail, "| $self->{sendmail} -t") or return(0, "Sendmail Error : $self->{sendmail}"); print webliberty_Sendmail "X-Mailer: $self->{x_mailer}?n"; print webliberty_Sendmail "To: $self->{send_to}?n"; print webliberty_Sendmail "From: $self->{send_from}?n"; print webliberty_Sendmail "Subject: " . $self->_encode($self->{subject}) . "?n"; if ($files[0]) { print webliberty_Sendmail "Content-Type: multipart/mixed; boundary=?"$boundary?"?n?n"; print webliberty_Sendmail "--$boundary?n"; } print webliberty_Sendmail "Content-Transfer-Encoding: 7bit?n"; print webliberty_Sendmail "Content-Type: text/plain; charset=iso-2022-jp?n?n"; print webliberty_Sendmail "$self->{message}?n"; foreach (@files) { my $file_ins = new webliberty::File($_); my $file_name = $file_ins->get_name . '.' . $file_ins->get_ext; print webliberty_Sendmail "--$boundary?n"; print webliberty_Sendmail "Content-Type: application/octet-stream; name=?"$file_name?"?n"; print webliberty_Sendmail "Content-Transfer-Encoding: X-uuencode?n"; print webliberty_Sendmail "Content-Disposition: attachment; filename=?"$file_name?"?n?n"; if (open(webliberty_Sendmail_FILE, $_)) { binmode(webliberty_Sendmail_FILE); print webliberty_Sendmail $self->_uuencode(join('', <webliberty_Sendmail_FILE>), $file_name); close(webliberty_Sendmail_FILE); } } close(webliberty_Sendmail); return 1; }

  • dsw
  • お礼率100% (1/1)
  • CGI
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

> $init->{sendmail_path} = '/usr/local/bin/sendmail -t -f ' メールアドレス' '; これだとシングルクオートでくくられた文字列中にシングルクオートが入っていて、正しい文字列になってません。 > $init->{sendmail_path} = '/usr/local/bin/sendmail -t -f "メールアドレス" '; としたらどうなりますか?

dsw
質問者

お礼

先ほど補足させて頂きましたが、もう一度見直した結果。 色々設定を変更している間に他の設定部分が変更されていたみたいで ご回答頂きました内容を再度チェックした結果 正常に作動致しました。 「うっかりしておりました」誠に申し訳ございません。 お騒がせいたしました。 とても助かりました。ありがとうございます。

dsw
質問者

補足

ご回答ありがとうございます。 以前に"メールアドレス" ';で試したのですが エラーとなりCGIが稼働しなくなってしまいます。 (サーバーマニュアルの記述でご質問させて頂きました。) 先ほどためしにもう一度変更してアップしてみたのですが Internal Server Errorとなってしまします。 これはCGI初期設定部分での-fオプションや-tオプションを受け付けないということなのでしょうか。

関連するQ&A

  • sendmailの-fオプション記述

    sendmailコマンドでは、-f オプションでfromアドレスを指定しない場合、お客様のBIGLOBEメールアドレスがfromアドレスに設定されてメール送信がされます。 ↑と記載されているので-fオプションを設定したいのですが、↓に書き足すにはどの様に記載したら良いでしょうか? if ($sendmail) {send_mail($sendmail,'',$subject,$masteremail,'','','',$msg)} if ($sendmail) {send_mail($sendmail -f ***@***.ne.jp,'',$subject,$masteremail,'','','',$msg)} ↑だとBIGLOBEメールアドレスのまま届いてしまいます。

    • ベストアンサー
    • CGI
  • 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ができない

    (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;

  • 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
  • CGI掲示板のSendmail送信について

    CGI掲示板を自作していますが、書き込み送信メールのSendmailによる送信処理でつまづきました。 以下のように記述すると、管理人である自分には登録メールが送られますが、 管理人以外に、書き込みした人にも登録確認メールが送られるようにしたいんです。 #Sendmailによる送信処理 if (open(MAIL,"| $sendmail -t")){ print MAIL "X-Mailer:legend2\n"; print MAIL "To: $administrator\n"; print MAIL "Errors-To: $administrator\n"; print MAIL "From: $administrator\n"; print MAIL "Subject: $subject\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "$mail_comment\n"; print MAIL "\n"; close(MAIL); } } 以下のどれかを使うのでしょうか? print SENDMAIL "From: $sender <$from>\n"; print SENDMAIL "To: $to\n"; print SENDMAIL "Cc: $cc\n"; print SENDMAIL "Bcc: $bcc\n"; どうすれば良いか御教授下さい。宜しくお願いします。

    • 締切済み
    • 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
  • 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の動作確認

    CGIプログラムを勉強し始めて、まだ数ヶ月の初心者です。 CGIの処理結果をメールで返すというプログラムをつくっているのですが、sendmailでサーバーエラーを起こしているようです。 サーバー自体は、DOS_VマシンにNetBSDを入れたものです。WEBサーバーとして問題なく動いています。 会社のサーバーなのですが、作り上げた担当者はもうおらず、どういう構成になっているか詳しいところまではよくわかりません。sendmailのパスはわかり、それで単純にメールを返すようなプログラムを組んでみたのですが、それでもサーバーエラーになります。 プログラムは以下のような簡単なものです。 #!/usr/bin/perl $sendmail = '/usr/sbin/sendmail'; $to = 'aaaa@bbbb.jp'; $from = 'cccc@dddd.jp'; $subject = 'TEST'; $mes = <<"EOF"; TEST MAIL EOF open(MAIL, "| $sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL $mes; close(MAIL); exit; プログラム的におかしなところはありますでしょうか? 実際、sendmail自体がちゃんと動作しているのかもわかりません。確認する方法というものはあるのでしょうか? よろしくお願いいたします。

  • sendmailについて

    以前ここで同様の質問を見たような気がするのですが、時間がないので、また質問させてください。 プロバイダーのsendmailを使ってメールマガジン送信フォームを作成したのですが、2600件メール送信実験中960件辺りで止まってしまいます。 スクリプトは以下の通りです。 foreach (@mailto) { $ok_cnt ++; if (open(MAIL,"| $sendmail -t")) { print MAIL "FormMailer: HOT-NET BINGO Original Mailer Vs2.00\n"; print MAIL "Reply-to: $master\n"; print MAIL "From: $master\n"; print MAIL "To: $_\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-Type: text/plain; charset=iso-2022-jp\n"; print MAIL "\n\n"; print MAIL "$message\n"; print MAIL "\n"; close(MAIL); open(TMP,">>$tmpfile"); print TMP "$ok_cnt\t$_\n"; close(TMP);           if (($ok_cnt % 100) == 0) {sleep 5;} } 当初4~500件位で止まってしまっていたので、 100件送信ごとに5秒のインターバルをおいてみました。 何がダメで止まってしまうのでしょうか? また、何か良い方法があれば教えていただけませんか?

    • 締切済み
    • CGI
  • cgi(perl) sendmailの使い方

    お手数ですがよろしくお願い致します。 レンタルサーバー(ロリポップ)にCGIを設置してサイトを作成しています。 メールフォームを作ってフォームから指定されたメールアドレスに自動返信するようにしたいのですが、うまく動作しなくて困っています。 利用環境は Perl(ver.5.8.8)でsendmailについては以下のようになっています。 ・SENDMAIL の利用は可能です。 postfixによるラッパーとなります。 ・sendmailのパスは/usr/lib/sendmail もしくは/usr/sbin/sendmail どちらでも利用可。 現在メールを送るところまでは出来るようになったのですが、届くメールを見ると宛先などのアドレスに余計なドメインが付加されているのです。 テスト中のcgiは大体以下のような感じです。 my $from = 'foo01\@bar.jp'; my $to = 'foo02\@bar.jp'; my $subject = 'test'; my $msg = 'test'; open(SDML,"| $sendmail -t -i") || die; print SDML "From: $from\n"; print SDML "To: $to\n"; print SDML "Cc: $cc\n"; print SDML "Subject: $subject\n"; print SDML "Content-Transfer-Encoding: 7bit\n"; print SDML "Content-Type: text/plain;\n\n"; print SDML "$msg"; close(SDML); これで送られてくるメールを見ると 宛先: "foo02@bar.jp"@usersXXX.phy.lolipop.jp (XXXは本当は数字。usersXXXはロリポップのサーバー番号というものらしいです。) こんな風に余計なドメインがくっついて送られてきます。 print SDML "To: $to\n"; → print SDML "To: foo02\@bar.jp\n"; という感じで直書きに直すとこの症状は起こらないのですが、変数で指定するとどうしても起こります。 自動返信するため宛先に変数を使いたいのですがどうしたらこの症状が出ないように出来るのでしょうか?

    • ベストアンサー
    • CGI

専門家に質問してみよう