WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:postfixでフォームメール

0:[投稿] タコですいません [2002/12/07 21:12 ][環境:UNIX系+NN UNIX系+Perl]

VineLinux2.6のディトリビューションに入っているpostfixを使ってcgiのフォームから外部の不特定多数へメールを送信したいのですがどうしても送信できません。現在の設定は以下のとおりです。

cgiの設定(例えばxxx@yahoo.co.jpへメールを送りたいとき)

$sendmail = '/usr/sbin/postfix';
    if (!open(MAIL , "| $sendmail -t")) {
        print "メールの送信に失敗しました。\n";
        }
    print MAIL "To: xxx@yahoo.co.jp\n";
    print MAIL "From: AAA@bbb.ddo.jp\n";
    print MAIL "Subject: test\n";
    print MAIL "MIME-Version: 1.0\n";
    print MAIL "Content-type: text/plain; carset=ISO-2022-JP\n";
    print MAIL "Content-Transfer-Encoding: 7bit\n";
    print MAIL "X-Mailer: Test\n";
    print MAIL "Hello!\n";
    close(MAIL);

postfixのmain.cfの設定(#を外して有効になっている行だけ列挙します)

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
myhostname = AAA.bbb.ddo.jp (AAAは自分で勝手に付けました。bbb.ddo.jpは無料で登録したドメイン名)
mydomain = bbb.ddo.jp
myorigin = bbb.ddo.jp
mydestination = $myhostname, localhost.$mydomain, $mydomain
inet_interfaces = all
virtual_maps = hash:/etc/postfix/virtual
allow_mail_to_commands = alias,forward,include
mynetworks = 192.168.1.0/24, 127.0.0.1/8
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/spool/mail
mtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
debug_peer_level = 2
debugger_command =
     PATH=/usr/bin:/usr/X11R6/bin
     xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/lib/sendmail
allow_percent_hack = no

この設定でcgiからメールを送信しても、メールボックスには何も届いていません。一体どうすればメールを送信できるのでしょうか。いろいろなホームページを調べて回ったのですがどうしても分かりません。どうぞどなたか助けて下さい。



1:[回答] Mr.X [2002/12/07 22:01 ]

CGI で、というのは本質ではないですよね?
その postfix から送信可能であることがそもそも確認できてないんですよね?

とりあえず relayhost が設定されてなさそうなのが気になりますね。
その場合直接送り先のメールサーバと SMTP で通信しようとしますが、
そこらのクライアントが直接 SMTP でつなごうとしてもはじかれると思います。
(踏み台防止とかそういう関係で)
relayhost に、あなたがお使いのプロバイダの SMTP サーバを記述し、
プロバイダのメールサーバを経由して送るように設定すべきでしょう。

うちの FreeBSD では /var/log/maillog に postfix のログが記録されます。
Vine Linux でもきっと似たようなディレクトリにログが記録されると思いますので
何かあったらログを確認しましょう。

それと、Software Design 誌 (技術評論社) 今月号の第2特集は
Postfix らしいので、参考になるかもしれません。


2:[質問] タコですいません [2002/12/07 22:46 ]

Mr.Xさん、御回答有難うございます。さっそく、

relayhost = ybbsmtp.mail.yahoo.co.jp

の一行を加えて試してみましたが、やはりメールは届いていません。

relay_domains =

の一行も必要なのでしょうか? その場合はどのように記述すれば良いのか教えて下さい。因みに、/var/log/maillogを見ると次のようになっていました。

postfix[1274]: error: to submit mail, use the Postfix sendmail command

postfix[1274]: fatal: the postfix command is reserved for the superuser


3:[回答] B-Cus [2002/12/07 22:53 ]

> postfix[1274]: fatal: the postfix command is reserved for the superuser

めちゃめちゃ原因がはっきり書いてあります。

http://www.kobitosan.net/postfix/jman/postfix.1.html

   こ の コマンドはスーパーユーザ専用です。メールを送信するに
   は、 Postfix sendmail コマンドを使ってください。

タコであるとかタコでないとかいう以前に、メッセージの意味を理解
する意志があるかないかの問題では。


4:[回答] タコですいません [2002/12/07 23:06 ]

B-Cusさん、御回答有難うございます。一連の作業はrootでログインしてやっていたのですが、suコマンドでスーパーユーザーになってpostfixをreloadしたところ、

postfix[1274]: error: to submit mail, use the Postfix sendmail command

postfix[1274]: fatal: the postfix command is reserved for the superuser

のメッセージは消えてくれました。が、やはりメールは届かないままです。一体原因は何なのでしょうか?


5:[回答] Mr.X [2002/12/08 11:20 ]

あー、postfix の設定の方に注意がいっちゃってたけど、
>> $sendmail = '/usr/sbin/postfix';
これは postfix システムのコントロールコマンドであって、
sendmail 互換コマンドは別にありますので、
> メールを送信するには、Postfix sendmail コマンドを使ってください。

あと、サンプルスクリプトはヘッダと本文の間の改行が1つ足りないような。


6:[質問] タコですいません [2002/12/08 15:11 ]

Mr.Xさん、ご指摘有難うございます。postfix関連のページをあちこち見て回った結果、幾つか新しい発見がありました。

1 Yahooのメールサーバybbsmtp.mail.yahoo.co.jpを使う場合、POP BEFORE SMTPなので、一度ユーザー名とパスワードを送って受信してからでないと送信できない。かといって、自分のメールサーバから直接SMTPで送信しても相手のメールサーバが受け付けてくれないことがよくあるらしい。

2 しかし、postfixにはそのための機能が無い。

3 そこで、fetchmailというVIneLinuxに標準で入っているソフトを利用して、五分おき位に自動でPOP3受信&ユーザー認証をするように設定しておけば良いらしい。

4 が、今度はfetchmailの設定が良く分からない。

以上です。後一歩のところまできているような気がするのですが、引続きアドバイスをお願いします。


7:[回答] [2002/12/08 21:36 ]

>外部の不特定多数へメールを送信
DM業者?
そもそも何をしたいの?

>自分のメールサーバから直接SMTPで送信
へっ?
yahoo.co.jp ドメイン宛てつまり自ドメイン宛てのメールを
受け取らないはずは無い、そんなMTAは無いと思われ
それとも ybbsmtp.mail.yahoo.co.jp を使って外部ドメインへ
の転送をしようとしているの?

fetchmailなんてつかわんでもcronもあるよ?


8:[回答] Mr.X [2002/12/09 10:39 ]

まぁ、メルマガだなんだで、複数アドレスに送信する
スクリプトの質問は割と見かけるし。
で、そういう時のコードで登録アドレス分ループを回していたりするのを見ると
悲しくなるので、MTA を立てたなら aliases や forward を使うなりなんなりして
一括して送れるように設定してほしいなぁ、とか。

閑話休題。
いきなり fetchmail で試す前に、まず(メーラーを起動するなりして)手動で
POP を動かして、送信できるかどうかを確認するのが先だと思いますが、
それはもうお済みでしょうか。
一つずつ追っかけていかないとどこに原因があるのか分からないと思います。
そういう意味では user@localhost にはちゃんと送れますか、
という確認も必要かな。


9:[回答] ひじ [2002/12/09 22:38 ]

特定多数に送るのであれば、宛先不明で戻って来たメールをどうするか、とかも考える必要があります。そういう手間とか考えると、メーリングリスト作るとか、まぐまぐとかのメルマガでやった方がよいと思います。

不特定多数に送る輩は、逝ってよし。


10:[回答] タコですいません [2002/12/10 17:53 ]

 「不特定多数への送信=スパマー」という誤解をしている方がいるようですが、自分のホームページを見てくれたゲストにCGIフォームで感想を記入してもらい、自動でお礼のメールを送りたい、という趣旨なのです。
 せっかくLinuxでPostfixをやるのですから、このような便利な使い方をしてみたいと考えている訳です。もちろんレンタルサーバを借りればすんなりと解決する問題なのですが、自宅サーバでこれをやってみたいという気持ちを持っている方は沢山いらっしゃるのではないのでしょうか。

 現在もあちこちのサイトを周って情報を集めていますが、何をどう記述すればよいのか、具体的に、書いてあるところは少ないので困っています。ひじさんはとても詳しいようですから、具体的なアドバイスをしていただけないでしょうか。


11:[回答] ふじ [URL] [2002/12/10 18:28 ]

自分で Linux マシンを持っているのなら、まず

man fetchmail

しましょう。

で、具体的には fetchmail を cron で一定時間ごとに動かすか、
fetchmail -d 300
としてデーモンモードで起動すればいいんじゃないでしょうか。

ただ、POP で認証を掛けると平文でパスワードが流れますから、
5分おきにひっきりなしに行うのはちょっと嫌な気もします。

メールを送信する直前に、Perl の Net::POP3 モジュールを使って
認証するほうが(程度問題ではありますが)マシかも。


12:[回答] [2002/12/10 22:03 ]

>「不特定多数への送信=スパマー」という誤解をしている方がいるようですが
自分の事だと思うけど、誤解じゃなくて最終的に何をしたいのか判らないから書きました。

>CGIフォームで感想を記入してもらい、自動でお礼のメールを送りたい
なら、単にそのCGIを利用しているサーバー上でフォームメール処理中に
自動返信させれば済むのでは?

A.フォーム書き込みへの自動返信をしたい
B.ローカルマシンのpostfixを利用したい

が、したい事だと思うのだけどそれぞれ別のこと
まったく的外れな6なんてカキコがあるから混乱する。
もっとも目的がfetcmailを使いたいなら話は別だけど。

自分の環境と、何をしたいのかをはっきり書かないと無駄なやり取りが増えるだけ。

で、もし「自分のホームページ」が公開している自分のローカルマシンで、
そこの「CGIフォーム」でのことならまた話も変わってくる。


13:[回答] タコですいません [2002/12/10 23:33 ]

 ホームページは自宅サーバーで公開しているとお考え下さい。

Windowsでのことなんですが、Apache+modSSL+ArGoSoftメールサーバー+Blatj+自作cgiの組合せで自契約プロバイダのsmtpを中継してメールを自動で送っていたのですが、これと同じことをLinux上でやりたいのです。

しかしLinuxは初めて触るので苦労しています。いろいろ調べてみるうちに、Postfix+fetchmail+Apache+cgiの組合せで上記と同じことができると分かって、その具体的な方法を現在勉強しているのが現状です。


14:[回答] D.D. [2002/12/11 23:33 ]

Vine の Postfix ってデフォルトの設定で localhost からのメールは送れるぞ。
あとは Net::SMTP でいいんじゃないか?


>>1
>とりあえず relayhost が設定されてなさそうなのが気になりますね。
>その場合直接送り先のメールサーバと SMTP で通信しようとしますが、
>そこらのクライアントが直接 SMTP でつなごうとしてもはじかれると思います。
>(踏み台防止とかそういう関係で)
>relayhost に、あなたがお使いのプロバイダの SMTP サーバを記述し、
>プロバイダのメールサーバを経由して送るように設定すべきでしょう。
localhost に MTA があるんだから、relayhost なんぞ設定せんでいいぞ。


15:[回答] ふじ [URL] [2002/12/11 23:47 ]

>localhost に MTA があるんだから、relayhost なんぞ設定せんでいいぞ。

http://www.kobitosan.net/postfix/ML/archives/msg01349.html
http://www.fml.org/mlarchives/MHL/fml-help/msg2071.html
こんな話もあるので、自宅サーバから直に配送するのではなく、
プロバイダのMTAを経由したほうがいいこともあります。

# うちの自宅サーバからも ez には送れない……


16:[回答] みっちゃん [2002/12/12 01:04 ]

>15
これってAU側の問題では?
例えば、掲示板で荒らしが特定のバイダーからカキコするのだけど、
IPが特定出来ないから、そのホスト名ごと拒否するのと同じかと

本来は、
迷惑をこうむる複数のユーザーがバイダーを替える

バイダーが調査に乗り出す

犯人が判明して安全宣言が出される

拒否しているホストがその設定を解除する

となるべきものだと思うけど、そんな悠長な事も言ってられないのか・・・


17:[回答] Mr.X [2002/12/12 08:44 ]

DNS の正引きと逆引きが一致しない相手からの接続を拒否する設定もありますし、
自宅サーバだと正逆一致してないこともままあると思うのですが。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World