• FreeBSD
  • masken
  • Links

FreeBSD Notes

サイト運用に関してのおぼえ書き・その他

  • Home
  • Contact
  • Log in

ユーザごとにAUTH先のSMTPサーバを切替えてメール送信

February 16th, 2008

前置き

今まで頻繁に来ていたトラックバックがあったことを知らせる通知メールが最近は来ていないな、と思っていたら、どうやら、現在利用しているISP*1でも本格的にOB25Bの制限が始まっていたらしい…。

メールのログに、

stat=Deferred: Operation timed out with XXX.XXX.XXX

と延々と記録されている。

といっても、OB25Bの初期の何年か前、こちらのサーバから携帯電話のメールサーバに宛ててメールが送信できなくなってしまったので、その頃、開始したGoogleのホスティングサービスを利用して、独自ドメインのメールはGMail上で送受信するように切替えていたので、通常使用の分には問題なかったんだけど。

ただ例外として、ブログのトラックバックやコメント等があった時の通知メールは、こちらのサーバから外部に出すようにしていた(大抵、海外からのトラックバックスパムやコメントスパムが発生原因で、あまり好ましいものとは言えないんだけど、一応…)。

しかし、放っておいても問題の解決にはならないので、調べてみたところ、

  • Yahoo OP25B 対策

に、SMTP-AUTHの設定を解説されているサイトがあった。

ただ、プロバイダの制約上、一つのアカウントに登録できるメールアドレスは、5つまでだそうなので、プロバイダ固有のものを除くと、独自ドメインのものは最大で4つまでとなってしまう(全部、それに割り当てても良ければの話。しかも、どのメールも同一ユーザでの認証が必要)。

ちょっと、これでは都合が悪いので、あれこれ模索してみていたところ、上記GMailのメールサーバでも、独自ドメインのアドレスで送受信できる事が判明*2。Googleの解説の

  • その他のメール クライアントの設定

では、Gmail のユーザー名 (@gmail.com を含む)と記述されていたから、今まで、メールアドレスは、gmail.comのドメインのものじゃないと駄目だと思っていたけど。

以下、Googleのサービスを利用して、ユーザごとに認証を切替えて、メールを送信する方法について書いてみました。

  • *1 現在、Yahoo!BBの回線を使用しています。
  • *2 Googleでは、一つのドメインに対し、25個までのアカウントを作成することができる(無料版の場合)

SMTP AUTH対応のSendmailの構築

というわけで、外部に向けて送信するため、SMTP-AUTH対応のsendmailを構築。

まず、portsからsecurity/cyrus-sasl2をインストールして、/etc/make.confに、

SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

を記述し、

# cd /usr/src/lib/libsm
# make obj && make depend && make
# cd /usr/src/lib/libsmutil
# make obj && make depend && make
# cd /usr/src/usr.sbin/sendmail
# make obj && make depend && make && make install

でsendmailを再構築。

設定

次に、/etc/mail/以下の設定ファイルの記述。

通常、SMART_HOSTを使うと思うけど、そうすると送信サーバが固定されてしまうので、複数のアカウントを使い分けている場合には不便。

smarttabe.m4の利用

そこで、ここでは、ユーザごとに送信先を選べるように、smarttableを使うことにする。

まず、SorceForge.netから、open-sendmailのソースファイルを取ってきて、

# tar zxf open-sendmail-2007-09-25.tar.gz
# cp -p ./cf/feature/anfi/smarttable.m4 /usr/share/sendmail/cf/feature/

と展開し、smarttable.m4をコピー。

FQDN.mcの作成

/etc/mail/内で、makeを実行して作成される/etc/mail/[FQDN].mcに、

FEATURE(`smarttable')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
FEATURE(`authinfo', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`authinfo')dnl

MASQUERADE_AS(`_domain_name')dnl
FEATURE(masquerade_envelope)dnl

を記述する(GMailの場合、587番ポートはSTARTTSLでTSL接続、465番ポートを使用した場合は最初からSSL接続。後段は、FromとReturn-Pathの記述)。

認証ファイルの作成

次にSMTP AUTHを行うための設定。/etc/mail/authinfoを作成し、

AuthInfo:user1.smtp-gmail "U:Acount1@example.com" "P:Password1" "M:LOGIN PLAIN"
AuthInfo:user2.smtp-gmail "U:Acount2@example.com" "P:Password2" "M:LOGIN PLAIN"

等と各SMTPサーバ*3に対応するユーザ名とパスワード等を記述*4した後、

# cd /etc/mail
# makemap hash authinfo.db < authinfo
# chmod 640 authinfo*
# chgrp smmsp authinfo.db

を実行して、ハッシュのデータベースを作成し、パーミッション等を適切なものに変える。

  • *3 同一の送信先に、複数のアカウントを割り当てて認証データベースを作成できないので、ここではアカウントごとに架空の送信サーバを指定して、ローカルのDNSで名前解決させることにしています。
  • *4 Sendmail cf/README - SMTP AUTH参照。
ユーザごとの送信先

/etc/mail/smarttableを作成し、

localuser1@host.local.domain    user1.smtp-gmail
localuser2@host.local.domain    user2.smtp-gmail

等と記述し、ローカルのユーザと送信先を対応させて、

# makemap hash /etc/mail/smarttable.db < /etc/mail/smarttable

とデータベースファイルを作成。

DNSの設定

ローカルのDNSのzoneファイルには、

*.smtp-gmail    IN      CNAME   smtp.gmail.com.

を追加して、名前解決できるようにし、namedを再起動。

設定の終了、sendmailの再起動

ローカル宛てのメールは、上記の設定を反映させる必要もないので、[FQDN].submit.mcに、

dnl If you use IPv6 only, change [127.0.0.1] to [IPv6:::1]
DAEMON_OPTIONS(`Name=NoMTA, Addr=127.0.0.1, M=EA')dnl
FEATURE(`msp', `[127.0.0.1]')dnl

を追加。

# make install restart

で、/etc/mail/sendmail*.cfを構築して、sendmailを再起動。

備考

以上の設定で、目的は果たせたようです。

なお、上記の設定は、ほとんど、

  • per-user rewrite+route / route non-t-online from-addr via t-online?

を参考にしたものです。

Posted in ports, base, mail | Send feedback »

更新履歴 2008/02/14

February 14th, 2008
  • FreeBSD-SA-08:03.sendfile

の更新が来ていたので、ソースを同期して、カーネルを更新&再起動。

結果、

# uname -r
6.3-RELEASE-p1

に。

Posted in base | Send feedback »

onclick メモ

February 11th, 2008

Another HTML Lintで、HTMLの文法をチェックすると、onclick属性を指定した場合、同時にonkeypress属性を指定していないと、

onclick 属性を使うときは onkeypress 属性も指定しましょう。 → 解説 150

と怒られる。

この解説には、

スクリプトのイベント処理では、装置非依存性を確保するために、次の属性は対で使用するように、アクセス指針技術文書4.12.2(J)で薦められています。

onmousedown+onkeydown
onmouseup+onkeyup
onclick+onkeypress

とあり、根拠の文書にも、

  1. Otherwise, if you must use device-dependent attributes, provide redundant input mechanisms (i.e., specify two handlers for the same element):
    • Use "onmousedown" with "onkeydown".
    • Use "onmouseup" with "onkeyup"
    • Use "onclick" with "onkeypress"

    Note that there is no keyboard equivalent to double-clicking ("ondblclick") in HTML 4.01.

そう書いてある。

だから、今までonclick属性を指定した時、無批判に、なるべく、onkeypress属性も指定することにしていた(基本的に、PCしか閲覧環境を想定していないけど。しかし、そうすると、TABを押してフォーカスを移そうとした場合でも、KeyPressイベントが発生してしまい、特定のキーコードが押された場合には無視するようにフィルタをかける必要がある)。

しかし、先日、JavaScript 第5版を読んでいると、p.408頁に、

「mouse」や「key」という言葉が含まれるイベントは、名前からわかるように、デバイス依存イベントです。これらのイベントを使う場合は、マウスでもキーボードでも操作できるように、両方のイベントハンドラを使用するようにしてください。onclickイベントはデバイス独立イベントと考えられることに注意してください。フォームコントロールやハイパーリンクをキーボードで操作した場合でも、このイベントが発生します。したがって、マウスに依存したイベントではありません。

と書いてあった。

試しに、

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
<head>
<title>click events test</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-script-type" content="text/javascript" />
</head>
<body id="top">
<form action="#top">
<p><input tabindex="1" type="submit" onclick="alert('form clicked'); return false;" /></p>
</form>
<p><a tabindex="2" href="#top" onclick="alert('link clicked'); return false;">link</a></p>
</body>
</html>

というサンプルを書いて*1、手元の環境で実験してみたら、

 Form itemLink item
EnterSpaceEnterSpace
○はイベント発生、×は発生しない
Firefox 2.0.0.12○○○×
Opera 9.25○○○×
Konqueror 3.5.8○○○×
IE6○○○×

という結果に。

確かに、Enterキーを押した場合では、フォームコントロールでもリンクでも、クリックイベントが発生している。

(もちろん、上記サンプルは、Another HTML Lintでは減点されるんだけど)

  • *1 tabindex属性をつけているのは、Operaだと、なぜかそうしないと、TABキーを押した時、リンク部分にフォーカスが移らなかったため。

Posted in www | Send feedback »

IEs4Linuxを使ってみた

January 31st, 2008

最近よく耳にする、最小の構成のIE6(もしくは、5.5 or 5)のインストールを自動化するスクリプトIEs4Linuxを使って、FreeBSD上のwineでIE6を動かしてみました。

使用したwineのバージョンは、portsから導入したwine-0.9.54,1です(この他、IEのインストールの際、archives/cabextractが必要になるので事前に導入)。

まずは、IEs4Linuxのダウンロードと展開。

> wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz
> tar zxf ./ies4linux-latest.tar.gz

便宜上、Linuxエミュレータのbashから、スクリプトを起動して、IEをインストール。

> env LANG=C /compat/linux/bin/bash
> cd ./ies4linux-2.99.0/
> ./ies4linux --no-gui --no-color
> exit

上記では、IE6とFlash9がインストールされます。

以降は、${HOME}/bin/にIEの起動スクリプトがインストールされるので、それを使って、通常のシェルから、IEを起動できます。

Read more »

Posted in デスクトップ環境 | 1 feedback »

portupgrade-devel - PortDirError

January 30th, 2008

先日、ports-mgmt/portupgrade-develが2.3.1から2.4.0のバージョンに更新されていた。

しかし、前バージョンportupgradeを使って、新しいものに更新しようとしても何故か失敗する。

結局、pkg_deleteで古いものを一旦削除し、make installで新しいportupgradeをインストールし直すという方法を取った。

ところが、新しく導入したportupgradeを使って、

portupgrade -aRr

と他のportsを更新しようとしても、最初の

[Gathering depends for portdir/portname ....done]

の後、失敗する。

  • /usr/ports/INDEX-*.db
  • /var/db/pkg/pkgdb.db

のデータベースファイルを作り直してみても、症状は同じ。

ログをよく見てみると、

** Port directory not found: databases/grass-i18n
/usr/local/sbin/portupgrade:1349:in `get_pkgname': port directory error (PortDirError)

という風にエラーが開始している。

確かだいぶ前にjapanese/ipa-ttfontsのTrueTypeフォントを入れた時、依存関係から、databases/grass-i18nも一緒に入って来た。

調べてみると、ipa-ttfontsは、現在もう、grass-i18nには依存してないようなので、grass-i18nの方をアンインストール(grass-i18nは、databases/grassにマージされて現在、portsディレクトリには存在していない)

今度は、新しいportupgradeでも、他のportsを更新できるようになりました。


[追記] これを書き終わった頃に、portupgrade-develが2.4.1のバージョンに更新されていました。A bugs fix releaseだそうです。

Posted in ports | Send feedback »

FreeBSD 6.3-RELEASEに更新

January 18th, 2008

FreeBSD 6.3-RELEASEが出てきたようなので、今まで使っていたFreeBSD 6.2Rから更新してみました。

行った手順は、

  • FreeBSD 6.2-RELEASEにアップグレード

の時とほぼ同じ。

こちらの環境では、特に問題もなく、移行できたようです。

終了後、make check-oldを実行してみたら、

>>> Checking for old files
/usr/share/info/bzip2.info.gz
/etc/namedb/PROTO.localhost-v6.rev
/etc/namedb/PROTO.localhost.rev
/etc/namedb/make-localhost
/usr/share/examples/netgraph/bluetooth/rc.bluetooth
/usr/share/man/man4/kame.4.gz
/usr/share/man/man3/archive_write_prepare.3.gz
>>> Checking for old libraries
>>> Checking for old directories
To remove old files and directories run 'make delete-old'.
To remove old libraries run 'make delete-old-libs'.

と表示されたので、不要ファイルを削除。

Posted in base | 1 feedback »

更新履歴 2008/01/15

January 15th, 2008
  • FreeBSD-SA-08:01.pty
  • FreeBSD-SA-08:02.libc

の更新が来ていたので、適用した。

結果、

# uname -r
6.2-RELEASE-p10

に。

Posted in base | Send feedback »

更新履歴 2007/11/30

November 30th, 2007
  • FreeBSD-SA-07:09.random

の更新が来ていたので、ソースを同期して、カーネルを構築しなおした。

結果、

# uname -r
6.2-RELEASE-p9

に。

RELENG_6_3のタグもうたれていたので、これで更新しようかとも思ってはみたものの、今回は保留。

Posted in base | Send feedback »

Apache 2.2.6

September 23rd, 2007

www/apache22のportが、Apache 2.2.6のバージョンのものにアップデートされていたので更新。

ビルド前、make configが実行されるようで、OPTIONS メニューが立ち上がるようになったらしい。

こちらの環境では、pkgtools.conf内に、

MAKE_ARGS = {
  'www/apache22' => [
                     'WITH_MPM=worker',
                    ],
}

といったように記述してある。

workerでは、デフォルトでONになっているmod_cgiが構築されないので、メニューの最後の方にあるmod_cgidの方を有効にしてビルドした。

Posted in www, ports | Send feedback »

b2evolution 1.10.2

August 20th, 2007

久しぶりの更新。

このブログで使用しているb2evolutionというブログツールが1.10.2に更新されていたのでアップグレード。

Firefoxで見ると、ブログが文字化けする問題は、直っていなかったようなので、前回と同様に、

--- inc/MODEL/settings/_locale.funcs.php~       Sat Mar 10 23:15:16 2007
+++ inc/MODEL/settings/_locale.funcs.php        Wed Apr  4 21:43:40 2007
@@ -869,7 +869,7 @@
        if( ! empty($force_io_charset_if_accepted) )
        { // we want to force a specific charset:
                if( ! isset($_SERVER['HTTP_ACCEPT_CHARSET']) // all allowed
-                       || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
+                       || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~i', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )

                {
                        $req_io_charset = $force_io_charset_if_accepted; // pretend that the first one has been requested
                }

の修正をした。

また、これはいつもやっていることだけど、スタブファイルに勝手に.phpのsufixを付けて欲しくないので、

--- inc/MODEL/collections/_blog.class.php~      Sat May 26 02:44:38 2007
+++ inc/MODEL/collections/_blog.class.php       Thu Aug 16 17:12:06 2007
@@ -504,7 +504,7 @@
                                { // We want to force the dynamic page but the URL is not explicitly dynamic
                                        // This is needed when a static page is taking control of domain.com/stub and we want an explicit link to the LATEST content, which can only be gotten at domain.com/stub.php
                                        // fp> This creates a small problem with empty stubs (domain.com/.php). This should be fixed by using a fourth blog_access_type: default, index.php, stub, *default_stub* . Consequence: require the stub fied on blog properties form when stub mode is selected
-                                       $blogurl .= '.php';
+                                 //                                    $blogurl .= '.php';
                                }
                                return $blogurl;

も修正。

Posted in b2evolution | Send feedback »

b2evolution 1.9.3

April 4th, 2007

ここのブログで利用しているb2evolutionというブログツールが

  • b2evo 1.9.3 "Rainforest" released

ということなので、アップグレード。

1.9.2のバージョンに更新した時、IE等のブラウザで閲覧した場合は問題なかったのだが、何故かFirefoxで閲覧した場合、ゲストユーザ(一般ユーザ)になって、ここのブログを閲覧すると文字化けして読めなくなっていた。

一応、応急措置として、conf/_locale.phpを

$force_io_charset_if_accepted = 'UTF-8';

と直して、こちらの環境では問題は解決したように見えたのだが、その後も、Firefoxだと文字化けするとのコメントをいくつか頂いていた。

こちらの環境では、FirefoxのPreferenceから、Content→Advancedのダイアログで、Default Character EncodingをUTF-8に設定していた。

これだと、

HTTP_ACCEPT_CHARSETUTF-8,*

として、リクエストヘッダがサーバ側に送られるようです。

しかし、Firefoxのデフォルトの設定では、

HTTP_ACCEPT_CHARSETISO-8859-1,utf-8;q=0.7,*;q=0.7

となっている。

b2evolutionはクライアントに応じて出力する文字を切替えてくれるらしいのだが、どうやら、UTF-8とutf-8の大文字と小文字の違いを処理できずに問題が生じていた模様・・。

とりあえず、conf/_locale.phpは、

$force_io_charset_if_accepted = 'utf-8';

としておき、ケースの違いで問題が起こらないように、

--- inc/MODEL/settings/_locale.funcs.php~       Sat Mar 10 23:15:16 2007
+++ inc/MODEL/settings/_locale.funcs.php        Wed Apr  4 21:43:40 2007
@@ -869,7 +869,7 @@
        if( ! empty($force_io_charset_if_accepted) )
        { // we want to force a specific charset:
                if( ! isset($_SERVER['HTTP_ACCEPT_CHARSET']) // all allowed
-                       || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
+                       || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~i', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
                {
                        $req_io_charset = $force_io_charset_if_accepted; // pretend that the first one has been requested
                }

として見ることにする。

Posted in b2evolution, Firefox | Send feedback »

PHP 5.2.1

February 11th, 2007

portsの方のlang/php5が、PHP 5.2.1になっていた(今まで、5.2.0を使用していた)。

その他のportsも含めて更新したかったので、

# portupgrade -aRr

としたところ、途中、なぜか、

cd: can't cd to /usr/ports/databases/pecl-PDO

と表示され、php5-extensions等のいくつかのportsの更新に失敗。

どうやら、

  • /usr/ports/MOVEDの該当箇所

にあるように、こちらの方で以前からインストールしてあったpecl-PDOが、php5-pdoに変更された事が原因らしい(typo?)。

そこで、一旦、

# pkg_delete -f /var/db/pkg/pecl-PDO-1.0.3

と古いのを削除してから、再度、

# portupgrade -aRr

を実行したところ、うまく行った。

追記

修正されました。

Posted in PHP | 4 feedbacks »

更新履歴 2007/02/10

February 10th, 2007

ソースをcsup(1)したら、

  • FreeBSD-SA-07:02.bind

の更新が来ていたのでアップデート。

上記に書いてある通り、

# cd /usr/src/lib/bind
# make obj && make depend && make && make install
# cd /usr/src/usr.sbin/named
# make obj && make depend && make && make install

としてから、

# /etc/rc.d/named restart

とbindを再起動した。

Posted in base | Send feedback »

b2evolution 1.9.2

February 8th, 2007

このブログを作成しているツール b2evolutionの最新バージョンがリリースされたようなので、今まで使用していた1.8.6のバージョンからアップグレードしてみた。

  • b2evo 1.8.7 AND 1.9.2 released!

1.8.7 Tokyoの方は、Super Stableの品質だそうだけど、今回は、1.9.2 Kyotoのバージョンをインストール。

データベースの更新後、ブログにアクセスしてみると、ゲストユーザで閲覧すると、予想通り、日本語の部分が???のようになって正常に表示されていないので、

  • conf/_locale.php
を
$evo_charset = 'utf-8';
$db_config['connection_charset'] = 'utf8';

のように変更。

しかし、なぜかFirefox (2.0.0.1)でアクセスしたら、なぜか、まだ???の症状は直っていない・・ (IE 7、Opera 9、w3m等では問題なかった)。

いろいろやってみたところ、上記、conf/_locale.phpを

$force_io_charset_if_accepted = 'UTF-8';

のように修正してみたら(UTF-8は大文字)、問題は納まった?模様。

Posted in b2evolution, Firefox | 1 feedback »

New ports category was created - /usr/ports/ports-mgmt

February 5th, 2007

いつものように、

# portsnap fetch update && portsdb -u

とportsツリーを更新し、

# portversion -l '<'

と更新されたportsを確認しようとしたら、

cd: can't cd to /usr/ports/sysutils/portupgrade

と警告された。

  • /usr/ports/UPDATING

を見たところ、

20070205:
  AFFECTS: everybody
  AUTHOR: pav@FreeBSD.org

  New ports category was created - /usr/ports/ports-mgmt

  Most significant port moved to this new category is portupgrade.
  So don't be alarmed, it was not deleted. You can find it now in

  /usr/ports/ports-mgmt/portupgrade

と、portupgradeが、ports-mgmtというディレクトリに移動したらしい。

Posted in ports | Send feedback »

1 2 3 4 5 6 7 8 9 10 11 >>
  • November 2008
    Sun Mon Tue Wed Thu Fri Sat
     << <   > >>
                1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30            
  • FreeBSD Notes

  • このサイトは現在、FreeBSDを利用して運用しています。
    このブログは、主に、それに関連した話題や、その他のおぼえ書きになります。

    • Recently
    • Archives
    • Categories
    • Latest comments
  • このサイトのはてなブックマーク数
  • Search




  • Categories

    • All
    • base
    • mail
    • ports
      • ccache
      • Java
      • MySQL
      • Perl
      • PHP
    • www
      • b2evolution
      • MediaWiki
      • スパム対策
      • 検索エンジン
        • Google
        • Technorati
    • お知らせ
    • その他
    • デスクトップ環境
      • Eclipse
      • Emacs
      • Firefox
        • Flash
        • Video
      • KDE
      • OOo
    • 日本語環境
  • XML Feeds

    • RSS 2.0: Posts, Comments
    • Atom: Posts, Comments
    What is RSS?
  • あわせて読みたい
  • SpreadBSD
powered by b2evolution free blog software

©2008 XDELTA.NET | Design by Michael | Credits: blog software | web host | advertising