- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

ここでは、以下の目的でpostfixを使うことにしてみます

  • 主目的:ローカルからのみ、転送でユーザーのすでにもつメールアドレスに送れるようにする。
  • 外部から受信しない(受信用のpop3不可)
  • 他のホストや外部からこのマシンに接続してメールを送らない(外部からSMTP接続不可)
  • プロバイダ等のSMTPサーバーを使わないで、なるべく自力で送信
  • すでにプロバイダやgmail等のメールアドレスを持っていてそこに転送するという想定

注意点としましては、外にメールを送る場合は、
DNSに自ホストが登録されていないと、メールが送れないので(スパム防止的に?)DNSの逆引きは登録する必要ありかも。

それと、今回のような送信だけなら送信自体に安心(?)のgmailを使う方法もあります。
こっちの方がいいような気がする…

その他公式ドキュメントも参考にしてください

諸設定は以下のサイトも参考になります。

動作確認環境は、

  • Ubuntu 8.04LTS server i386
  • Ubuntu 10.04LTS server amd64

インストール Edit

sudo aptitude install postfix

GUIの初期設定画面がでない場合は以下のコマンドで出せます。

sudo dpkg-reconfigure postfix

いろいろ質問がでますので、上で書いた目的に合わせて、以下のように選んでみます

  • あなたの用途に合ったメールサーバ設定形式を選んでください:「ローカルオンリー」を選択
  • システムメール名:myserver.example.com (メールで@以下で使用されるドメイン名。自ホストをFQDNで)
  • root と postmaster のメール受け取りユーザ: (管理者ユーザー名) (最初に作ったユーザー名=管理者ならそれでいいかと)
  • メールを受け取るほかの宛先 (なければ空): $myhostname, localhost.localdomain, localhost
    (このアドレス宛に出されたものを受け取る設定。
    $myhostnameは「システムメール名」で設定したもので、
    つまり、$myhostname, localhost.localdomain, localhost は実際に、
    myserver.example.com, localhost.localdomain, localhost と解釈して処理されるはずです)
  • メールキューの同期更新を強制しますか?:<いいえ> (デフォルト)
  • ローカルネットワーク: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    (デフォルト, ローカルホストのみをローカルネットとみなす=他からはこのマシンを利用してそのまま送信できない)
    自ホストからのみ送信したいのでこれでいいんじゃないかな。
  • ローカル配送に procmail を使いますか? : <はい> (デフォルト)
  • メールボックスのサイズの制限 (バイト): 0 (デフォルト, メールボックスサイズを制限しない)
  • ローカルアドレス拡張文字: +
    (デフォルト, gmailみたいにアドレスの後ろにfoobar+hoge@example.com みたいなエイリアス作れるアレだと思われる)
  • 利用するインターネットプロトコル: すべて(デフォルト)

質問の入力完了後の出力例:(以前に設定したことがあったので、初めての設定の時とは出力違うと思う)

setting synchronous mail queue updates: false
setting myorigin
setting destinations: $myhostname, localhost.localdomain, localhost
setting relayhost: 
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_command
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: loopback-only
setting inet_protocols: all

Postfix is now set up with the changes above.  If you need to make changes, edit
/etc/postfix/main.cf (and others) as needed.  To view Postfix configuration
values, see postconf(1).

After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.

Running newaliases
 * Stopping Postfix Mail Transport Agent postfix                                                                 [ OK ] 
 * Starting Postfix Mail Transport Agent postfix   

細かい設定 Edit

以前は /etc/postfix/main.cf を編集していましたが、そうではなく sudo postconf -e コマンドを使って設定してみることにします。

この状態では外部へはメールを送信できないので対処してみます。
最初に選んだ「ローカルオンリー」の設定だと、 default_transport = error になっているので、

$ sudo postconf -e 'default_transport = smtp' 

に。

postfixを再起動

$ sudo /etc/init.d/postfix restart

rootへのメールを飛ばす Edit

あとは、rootに送った時にメールを飛ばすユーザーを確認

cat /etc/aliases

飛ばすユーザーを変えたいなら修正します。
(ここでは、tobyさんとmageさんに転送しています)

$ sudo vim /etc/aliases
root: toby, mage
$ sudo postalias /etc/aliases

設定を反映 Edit

設定を編集したら、

sudo postfix reload

で設定を反映させます。

して、下記の送信テストを行う。

メール転送設定 Edit

受信したメールを転送するには、

~/.forward

にメールアドレスを書く

デフォルトではrootに届いたメールはインストール時に作ったユーザーに届くようになっているので、そのユーザーだけは設定しておくこと

ちなみに、/etc/aliases で設定してもよいようです。
例えば、ホームディレクトリのないユーザーとかはそちらで設定する。

メール送信テスト Edit

送信テスト前に、別のターミナルでメールのログを開いて置きます。
(エラーとか状況が確認しやすい)

tail -f /var/log/mail.log

そしておもむろに、テスト送信してみます。

echo "This is jocker" | mail -s "test from jocker" (テスト的に送信したい先の自分のメールアドレス)

を実行してみてください。

(mailコマンドがねーぞ!て言われたら、

sudo aptitude install mailutils

でmailコマンドその他をインストールしてください(多分「これ入れたらいいんじゃね?」と教えてくれる候補の中にあるとは思いますが…))

ログを確認すると、

Jan 1 00:26:37 (ホスト名) postfix/qmgr[12345]: xxxxxxxxxxx: from=<(ユーザー名)@(myoriginで設定したもの)>, size=351, nrcpt=1 (queue active)
Jan 1 00:26:40 (ホスト名) postfix/smtp[12345]: xxxxxxxxxxx: to=<(送り先)>, relay=(相手のメールサーバー):25, delay=3.1, delays=0.03/0/2.4/0.72, dsn=2.0.0, status=sent (250 2.0.0 n0C8QMkx022597 Message accepted for delivery)
Jan 1 00:26:40 (ホスト名) postfix/qmgr[12345]: xxxxxxxxxxx: removed

Message accepted for deliveryと出ていますのでうまくいっています。

また、

mailq

で送れているか確認。

ログやmailqでエラーが出ていたら、
/etc/postfix/main.cf などを確認すること。

送ったメールアドレスできちんと受信できているか確認してください。

ちなみにユーザー宛に送るときは、

echo "This is jocker" | mail -s "test from jocker" (ユーザー名)

でOKです。rootに送る場合だと

echo "This is jocker" | mail -s "test from jocker" root

です。

ログにの最後の方にMessage accepted for delivery と載っていればOKでしょう。
実際に届いているか確認してみてください。

テストメールが、”(テスト的に送信したい先の自分のメールアドレス)” に届いていればOKです。

  • From(送信元):(送信ユーザー名)@my_host.example.com
  • To(送信先):(テスト的に送信したい先の自分のメールアドレス)
  • 件名:test from jocker
  • 内容:This is jocker

にそれぞれなっていればOKです。gmail宛に送ってみたところ、1分もかからずに届きました。

もしいつまでも届かないならば、上記で書いたようにログを確認して、
設定のミスなどを疑ってみてください。

.forwardやaliasを使わないでローカルに来たメールを確認する時 Edit

.forward や /etc/alias など転送を行わない時に、
ローカルに来たメールを確認する方法。

まずは、mailxをインストール

sudo aptitude install mailx

メールを送信したら、mailコマンドで確認

toby@myhost:~$ mail
Mail version 8.1.2 01/15/2001.  Type ? for help.
"/var/mail/toby": 1 message 1 new
>N  1 (送信元).  Fri Jan  2 15:27   15/455   test mail from toby
& 
Message 1:
From toby@localhost  Fri Jan  2 15:27:09 2009
X-Original-To: root@localhost
From: (送信元)
Subject: test mail from toby
Date: Fri,  2 Jan 2009 15:27:09 +0900 (JST)
To: undisclosed-recipients:;

toby test test desuj
testu desu

& exit
toby@myhost:~$ 

その他コマンド Edit

再送信 Edit

キュー内のメールを再度送信するコマンドは

sudo sendmail -q

キューを確認する Edit

メールが送れているか、キューを確認するには、

mailq

キュー内のメールを削除する Edit

どうしてもエラーが出て送れないメールをキューから削除するには、

postsuper -d (キューID)

キューIDは、mailqで、得たもの

全部削除する場合は、

postsuper -d ALL

でよい。

問題ごと Edit

特定のメールアドレスに Domain of sender address *****@******* does not resolve (in reply to MAIL FROM command)) エラーで送信できない Edit

gmailには送信できるけど、他のサーバーには送信できない!ってときとか。

このへんのエラーログは、下記で確認しましょう

$ tail -f /var/log/mail.log 

gmail宛はこのへん緩かったりするのですが、相手のサーバーによっては、
DNSに登録されてないホスト名で送ると、こんなエラーが返ってきます。

例えば、最初の設定で、ホスト名を myserver.example.com (example.comは例です)に設定したけど、
myserver.example.com はまだDNSに登録していない場合。

対処法は、以下のようにいくつか考えられました。

  • DNSに myserver.example.com の正引きを設定する
    ただし、設定してすぐには有効にならないので注意(問い合わせられているDNSサーバーやDNS側の設定にもよります)
  • DNSで引ける名前を設定する
    例えば、example.comとかがすでに設定済みなら、それを使うとか
    ただし、送信元が myserver.example.com でなく example.com になるのでそれでもいい場合ですな
    (もちろん、example.comはあくまで例ですので、実際は自分の管理しているドメインを使ってください)
  • 根本的に、このページの記載のように直接サーバーから送信する方法をとらないで、gmailとかプロバイダのsmtpサーバーを使う方法
    →また別の機会に

.forwardを指定しても転送されない Edit

送信先アドレスを hoge@example.com とフルで指定する場合は送られるけど、
root や foobar のようにユーザー名指定でローカルのユーザーに送ると、
.forwardを無視するようで.forwardに書いたアドレスに転送されず、
ローカルのメールボックスに直送される件

mydestination のせい?かな?

XREA 相手だとメールが送れない問題 Edit

送る先の相手メールサーバーがXREAの場合、

451 DNS temporary failure (#4.3.0) 

と言われメールを送れません(´;ω;`)

他のメールアドレスには特に問題なく送れます(さくらのレンタルサーバー、gmail等)。
困っているのですが、原因を調査中です。

送信元ホストがDNS逆引きできてない悪寒…???
DNSをネットワーク管理者に設定をしてもらってるはずなんだけど、確かに実際に逆引きできねえww たぶんこれだな原因は…。
→逆引きしてもとどかないよ!!!!
→というかですね、XREAのメールサーバーへは他のプロバイダやgmailなどからも普通にメール送信して届かないことがありました(´・ω・`)
(XREAを大事な用で使ってみて、知り合いからのメールが届かなくて、いろいろとヤバイことがいくつかあり(´・ω・;;;
多分、XREA独自のスパム対策なのだと思います。
根本原因がこちらの問題かどうかは詳しく原因探ってません…

このXREAへ送信できない件の問題の詳細希望ヽ(`Д´)ノ ウワァァン!!

↓外部からちゃんと逆引き出来ているかは例えばここで試してみました。

参考リンク Edit


  • 参考にしていただいて、ありがとうございますm( ̄ー ̄)m -- kozupon.com管理人です? 2009-09-28 (Mon) 17:34:31
  • ども!こちらこそ、ありがとうございました。 -- TOBY 2009-09-28 (Mon) 19:13:20


Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2013-03-26 Tue 18:38:06 JST (1702d)