ラベル mail の投稿を表示しています。 すべての投稿を表示
ラベル mail の投稿を表示しています。 すべての投稿を表示

2013年8月6日火曜日

ホスト型侵入検知ツール(IDS)の aideを Amazon Linuxにインストール

徳丸さんが改ざん検知を導入したそうなので、うちにも入れてみた。徳丸さんはionotifywait(とTripwire)を採用したそうだけど、調べてみたらaideの方が使いやすそう。aideはTripwireなどと同じホスト型の侵入検知ツールというか改竄検知ツール、というか差分ファイル調査ツール。
なのでaideをAmazon Linuxにインストールしてcronで動かすまでの備忘録。rootで作業した。

インストール
yum install aide

設定ファイル編集
vi /etc/aide.conf
  • デフォルト設定の注意点
    • /var/www が含まれていないのでWebファイルの改竄を検知できない
    • /etc/httpd も含まれていない
    • /var/log が含まれているのでログが書かれると反応してしまう
  • 最初は厳し目(検知多め)にしておいて、使いながら緩くしていくのが良さそう

cron設定例
MAILTO=foo@example.com
00 2 * * * cd /var/lib/aide; cp aide.db.new.gz aide.db.gz; /usr/sbin/aide -u > /dev/null || cat /var/log/aide/aide.log
  • 毎晩2時に、前回作ったDBを適用し、チェック&DB作成を実行し、異常があった場合のみログの内容をメールで送付する場合の例
  • エラーがある場合は標準出力に出力されるエラー情報と同じ内容がログにも出力されるので、標準出力は /dev/null に捨てている


きちんとやるなら、aideのDBをどうやって守るか(別サーバに置くなど)とかも考えないといけないみたい。

2013年4月28日日曜日

cronでエラー時にメールを送信するサンプル

1. 標準出力とエラー出力の両方をログに記録しつつ、エラー出力がある場合はその内容をメールする場合
MAILTO=foo@example.com
* * * * * (php test.php 1>>test.log) 2>&1 | tee -a error.log

teeで -a オプションを付けてerror.logに追記するようにしている。
test.logとerror.logは同じファイルでもOK。

エラー出力もログに残したいけど、何らかのエラーが出た時にメールさせたい場合に使う。



2. コマンドの戻り値が0でない場合のみ、ログの最後の方をメールする場合
MAILTO=foo@example.com
* * * * * php test.php 1>>test.log 2>>error.log || tail error.log
test.logとerror.logが同じでよいなら、2>&1にすればよい。
メールに出力するのはtailじゃなくてもよい。
異常じゃなくてもエラー出力を出すような処理の場合はこちらで。

2012年10月22日月曜日

小さな会社のITインフラを低予算で揃える方法を妄想してみた

もし小さな会社のITインフラを最低予算で用意するなら...

  • メール、カレンダー共有、ファイル共有、ドキュメント共有 → Google Apps
    • ファイル共有は普通に考えたらファイルサーバを立てるんだけど、思い切ってクラウドで。Dropboxと迷うところこだけど、どうせGoogle Appsを使うなら挑戦的にGoogle Driveで。検索に強そうでしょ?(漢ならS3直で!というのも香しいが...)
    • ドキュメント共有はGoogle Docsを使い社内用のメモ程度のものを想定。社外とのやりとりは、結局ExcelやWordが中心になるだろうから。Goolgeスプレッドシートが使い物になればなあ...。
  • Webサイト → Blogger
    • 静的ページを組み合わせて「ホームページ」風にする。
    • ブログ部分は新着情報的に使う。
    • 会社所在地を載せるならGoogle Maps埋め込みで。
  • お問合せフォーム → Google App Engineでチャチャッと作る
    • 入力されたらメールを飛ばす。
    • Google App Engineはhttpsで使えるのが便利。
    • 本当に簡単に済ませるなら、お問合せ用メールアドレス載せとくだけという手もある。
  • ドメイン
    • Webサイトを www.xxxxx.com にして、 お問合せフォームを ssl.xxxxx.comにする感じかな。あるいはWebサイトを xxxxx.com にして、お問合せフォームを q.xxxxx.com とか?(人力検索っぽい!)
  • タスク管理 → Backlog
    • Redmineの方がいろいろカスタマイズはできるけど、非開発者にフレンドリーなBacklogが無難かな。
    • Backlogいつの間にかGitに対応してる!
    • Backlogにもファイル共有あるんだ...有料版使うならこっちのファイル共有を使うという手もあるか。
  • 何かでサーバが必要になったら → Amazon EC2
    • 定期的にS3にバックアップをとる。
 これなら社内にサーバが要らない。出先でも普通に仕事が出来る。外出が多いなら、いっそ事務所には固定回線無しで、イーモバイルのみというのもいいかもね。

他にも思いついたら足してく(かも)。

2011年3月18日金曜日

AWS CloudFormationで PHP Hello World Applicationを作成してみた

AWS(Amazon Web Services)のCloudFormationの「PHP Hello World Application」に関する情報があまりないので試してみた。


まずはAWS Management Consoleから「PHP Hello World Application + SSH enabled」のstackを作成。
場所はAsia/Pacific 東京リージョンを選択できた。
インスタンスタイプはMicroインスタンス、OperatorEmailには自分のメールアドレスを記入した。


しばらくすると、こんなのが作成された。

  • S3
    • 空のバケットが作成された(バックアップ用?)
  • EC2
    • Root Device Typeがebsのインスタンスが1つ作成された
    • EBSのCapacityは8GiB
    • Security Groupが1つ作成された
      • SSHとHTTP(ポート番号は8888)のポートで、ともにIPアドレス制限無し
    • Load Balancerが起動した
      • 80番ポートを待ち受けてインスタンスの8888番ポートに向ける
    • Elastic IPは作成されなかった
  • CloudWatch
    • Alarmが3つ作成された
      • RequestLatencyAlarmHigh
      • CPUAlarmHigh
      • TooManyUnhealthyHostsAlarm
    • 閾値に達したら登録したメールアドレスにメールで知らせてくれるようだ
  • CloudFormation
    • stackが1つ作成された(そりゃそうだ)
  • RDS
    • DB Instanceが1つ作成された
      • DB Engine Versionは5.1.50
      • DB Instance Classはdb.m1.small
      • DB Storageは5GiB
      • Backup Windowは15:00~15:30(日本時間?)
      • Maintenance Windowは日曜14:00~14:30(これも日本時間?)
    • DB Security Groupが1つ作成された
      • 上記のEC2 Security Groupが適用されている
    • DB Parameter Groupのcharacter_set関連は「engine-default」になっているが、UTF-8使えるのかな?
  • SNS
    • CloudWatchのメール通知用のTopicが1つ作成された


EC2のLoadBalancerのドメインにHTTPでアクセスすると、Wellcomeメッセージとともにphpinfoが表示された。
phpinfoによるとバージョンは下記の通り。
  • Apache : 2.2.16
  • PHP : 5.3.3

SSHでアクセス(SSHのログインユーザーはrootでなく"ec2-user"なので注意。"ec2-user"はsudoができる)してみると、/var/www/html の中には index.php しかなかった。
ユーザー"ec2-user"のviはPHPのソースがハイライトされて見やすい。(少し目がチカチカするが。)

PHP拡張については主なものは入っているが、mbstringが入っていない。
yumで入れたら普通にインストールできた。
sudo yum install php-mbstring

mbstringを有効にするためにApacheを再起動。
すると、アクセスできなくなった。EC2のLoadBalancerからインスタンスが外れている。
SNSからのアラートメールもいくつも送られてきてる。

調べてみると、httpd.confでポート番号が80になっていた。
8888に変更して再起動。

これでアクセスできるようになった。mbstringも使えるようになった。


使い終わったら、AWS Management ConsoleでCloudFormationのstackを削除。
するとCloudFormationが作った一連のものをきれいに削除してくれた。
例外はS3で、S3だけはバケットが残っていた。


あとこれは今回の調査に直接関係ないが、AWS Management ConsoleのS3とEC2が重くなった気がする。(この前の改善の影響?)


結論
ささっとPHP実行環境を作りたいなら、これもありかもしれないと思った。
RDSを使いたいかどうかは状況によるけど、CloudWatchとかSNSの設定が楽なのは便利そう。

2011年2月17日木曜日

Gmailの新着メールを通知してくれる Firefoxアドオン 4つを比較

Gmailが進化して、Google Chromeなら拡張なしでも(HTML5を使って)Gmailの新着メールをデスクトップ通知してくれるようになった。(Google AppsのGmailはまだ未対応?通知は来たけどうまく機能しなかった。)

で、同じようなことをFirefoxでやりたくてアドオンを調べたのでメモ。
調査ポイントは、

  • Google AppsのGmailで使えるか
  • デスクトップ通知(ブラウザ以外のアプリ(例えばExcel)で作業をしている場合でも、新着メールの通知を表示する)があるか
  • ステータスバーのアイコンをクリックした時に、いい感じにGmailのページを表示してくれるか


Gmail Notifier
  • 2010年の年末頃からログインできなくなった(これにより、世に言うGmail Notifer難民が発生した)
  • Google AppsのGmailでも使用可(だった)
  • デスクトップ通知あり(だった)
  • ステータスバーのアイコンをクリックすると、既にGmailを開いている場合はそのタブを表示、Gmailを開いていない場合は新しいタブを開いて表示、空白タブしかない場合は空白タブ上で表示できるのが便利(だった)
  • 非公式ビルドならログインできるらしい


Gmail Manager
  • Google AppsのGmailでも使用可
  • デスクトップ通知なし
  • 新着メール通知の一部が文字化けしているが、件名とかは無事なので支障はない
  • ステータスバーのアイコンをクリックした時にどのタブで表示するかは設定できるが、Gmail Notifierのような動きはできない
  • 中クリックを新着メールチェックに割り当てられるのは便利

WebMail Notifier
  • Google AppsのGmailで使えなかった。使える場合もあるので、Google Appsのセキュリティ等の個別のポリシーが原因だと思われる


GMail Checker
  • Google AppsのGmailでも使用可
  • デスクトップ通知あり
  • ステータスバーのアイコンをクリックした時にどのタブで表示するかの設定でGmail Notifierのような動きはできない
  • 日本人はあまり使っていない?上記3つに比べて、日本語の紹介サイトが少ない


元々はGmail Notifierを使っていて「デスクトップ通知」を使えていたのだけれど、去年末からログインできなくなった。
それでGmail Managerに乗り換えたが、機能的には良いのだが残念ながら「デスクトップ通知」をしてくれない。
WebMail Notifierは自分が使っているGoogle Appsで使えなかった。
結局、Gmail Checkerに落ち着きそう。

Gmail Checkerは機能的には過不足なくいい感じだけど、ステータスバーのアイコンをクリックした時の動きはGmail Notifierが一番良かった。
メール件数はfaviconで見えるから、あと欲しいのはデスクトップ通知なのです。

2010年10月26日火曜日

ファイル1つだけで出来ている 便利なPHP製ツールいろいろ

PHPライブラリは新時代に入った。定番だったphpMyAdminやPEAR::Mailはもう古い。最近は1ファイル配置するだけで簡単に使える便利なツールが増えてきた。

例えばこんなの。



次は1ファイルのフレームワークだね。(Google Code上にはもうたくさん公開されてるけど...)
あるいは1ファイルのブログシステムやWikiか?

2010年10月9日土曜日

Googleの 各サービス個別のLabsを集めてみた

Google Labsに入っていない、Googleの各サービスのLabs(実験的機能)を集めてみた。


  • TestTube
    • YouTubeのLabs
    • HTML5で動画を見るにはここで設定するみたい
  • Google Maps Labs
    • Googleマップの右上の緑色のフラスコのアイコンから設定できる
    • URLの短縮化、地図の回転、周辺情報の表示(Google Palces?)、緯度経度の表示(ツールチップ or マーカー)など、ちょっと便利な機能がある
  • GMail Labs
    • GMailにログインして、右上の「設定」リンクまたは緑色のフラスコのアイコンから遷移できる
    • 「宛先入れ忘れ防止」「既読ボタン」「既読ラベルを非表示にする」など、いろいろ便利な機能がある
    • Google AppsのGMailでも使える
  • Google Calendar Labs
    • Googleカレンダーにログインして、右上の「設定」リンクまたは緑色のフラスコのアイコンから遷移できる
    • Google Appsのカレンダーでは使えない
  • Blogger in Draft
    • BloggerのLabs
    • Bloggerユーザーなら、こっちをデフォルトにすることをお薦めします
  • Google Experimental Search
    • Google Labs内にある、「Google Search Labs」なもの。(これだけGoogle Labsに入っている。)
    • でもGoogleサジェストとかGoogleインスタントはここを経由せずにリリースされた。(サジェストがGoogle Labsに居たころは、まだExperimental Searchが無かったか。)


Google DocsとかPicasa WebとかGoogle AnalyticsとかAdSenseにもあっても良さそうだけど、無いのかな?

2010年3月20日土曜日

Postfixでメール受信時に PHP等のプログラムを実行する方法

空メールを受け取った時の自動メール返信などに。


  1. Postfixの設定ファイル(/etc/postfix/main.cf)にvirtualファイルのパスを書く(hogeのところは任意の名前)

    virtual_alias_maps = pcre:/etc/postfix/virtual.hoge
  2. 上記で書いたパス(/etc/postfix/virtual.hoge)にテキストファイルを作成し、正規表現等で振り分けを設定する
    左側の条件にマッチした場合のみ、右側のaliasに渡される(詳細はpostfix virtualで調べれば色々出てくる)

    /^[0-9]+@/ hoge-request
  3. /etc/aliasesに上記で書いたaliasを追加
    左側にalias名、右側にクォーテーションで括って実行するファイル(php)とそれに渡すパラメータを書く
    この場合、/var/php/hoge.phpが実行される

    hoge-request: "|/usr/bin/php /var/php/hoge.php"
  4. Postfixを再起動

    newaliases
    /usr/sbin/postfix restart
  5. PHP内では標準入力からメールの生データを受け取れる
    PEAR::Mail_mimeDecodeを使うと便利だと思う

    $raw_mail = file_get_contents("php://stdin");


参考:SEメモ 受信したメールをPHPにパイプさせる方法

2008年12月6日土曜日

PHPのmb_send_mail()でのSMTPエラー(550 5.7.1)の解消方法

PHPのmb_send_mail()からIISの簡易SMTPサーバを使ってメールを送信しようとしたとき、下記のエラーが発生。

PHP Warning: mb_send_mail() [<a href='function.mb-send-mail'>function.mb-send-mail</a>]: SMTP server response: 550 5.7.1 Unable to relay for ...

原因はSMTPサーバがデフォルト設定で、中継を許可していなかったため。
中継を許可するIPアドレスに127.0.0.1を加えたらメールが送信できるようになった。

2008年7月28日月曜日

レンタルサーバーでメール受信時にプログラム起動する方法


さくら

  • maildropというメール配信プログラムを使っているため、.forwardによるメール処理設定は使えない
  • maildropでは、メールアカウントごとにmailfilterを設定すればプログラムの起動など好きな処理が可能
  • catch all(※1)は無いので、virtualなアカウントで受信してプログラムを起動することはできない
  • Gmailのようにメールアカウントの後ろに"+"を付けてメールアカウントを擬似的に増やすことはできないようだ
  • 1つのメールアドレスで複数の処理やデータを振り分けるには、下記の方法が考えられる
    • サブドメインで振り分ける(@の左側が同じなら、異なるサブドメインでも同一アカウントとして扱われるらしい)
    • 件名にKEYを入れてそれで判断する(参考:mailto:について)
  • メールの自動返信だけならmailfilterでmailbotを使えばできる


XREA


X Server


結論
特定のサブドメインに来るメールをプログラム側で宛先メールアドレスごとに処理をしたい場合、X Serverを使うのが良さそう。(試したわけでは無い。要確認。mailfilterを編集しなければいけない?件が気になる)
(例)123.shop@sub.example.com(123の所は任意の数字)に来たら、メールの振り分けで「宛先が.shop@sub.example.comのメールは/var/php/reply.phpに渡す」という設定をしておく


※1:「catch all」とは、存在しないメールアカウントへのメールを特定のメールアドレスに転送する機能のこと

XMailからバッチファイルを起動する方法

XMailで、カスタムドメイン処理かコマンドエイリアスを使ってWindows上のバッチファイルを実行する方法。
基本的に使い方はコマンド実行機能 - xmailserver.jpに書いてあるが、一部このままでは動かないのでメモ。


バッチファイルを使う例
(パラメータ間のスペースは実際にはタブで書く)

"external" "1" "0" "C:test1.bat" ""
"external" "1" "0" "C:test2.bat" ""


ポイント
  • externalコマンドのパラメータが3つだと動かないので、空でも4つ目のパラメータを渡す必要がある
  • 優先度(上記例では1)を0にすると環境によっては(?)実行されないことがあるので1にした方が良さそう
  • メールのファイルを渡す場合、タイムアウト秒数(上記例では0)を余裕を持った数字(300とか)にする。そうしないと外部プログラムを実行する前に、XMailがファイルを削除してしまう可能性がある(参考:コマンド実行機能 - xmailserver.jp)
  • バッチファイル実行時のディレクトリは下記になる。間違えてバッチファイルからの相対パスを書かないように注意
    C:WINDOWSsystem32
  • コマンドは複数行並べて書くことができる(参考:コマンド実行機能 - xmailserver.jp)
  • コマンド実行機能 - xmailserver.jpにはコマンドとしてWindowsのコマンドやバッチファイルを指定できると書いてあるが、実際にはできないようだ。(あるいはやり方が特殊なのか?)
    "コマンド" には XMail の内部コマンド、OS の内部コマンドや外部コマンド、シェルスクリプト(UNIX)やバッチファイル(Windows)、標準入出力に対応した任意のプログラムなどを指定できます。

2008年4月26日土曜日

初めてのPostfix設定/操作メモ

主にLAN内での実験用の設定。


  • バージョンの確認方法
    postconf mail_version
  • 設定等の情報を表示
    postconf -n
  • localhost以外からもアクセスできるようにする
  • ドメインがIPのメールを受け入れる
    • main.cfに下記を追加する
      resolve_numeric_domain = yes
    • postfixのバージョンが2.3以降のみ有効
  • LAN内から、ドメイン部分にIPアドレスを指定したメールを受け付けるようにする
    • 例えばサーバのIPアドレスが192.168.1.2の場合、クライアントからの送信先メールアドレスがtest@192.168.1.2で受取れるようにする
    • main.cfを編集する
      # IPアドレスが192.168.1.2で、ドメインがexample.comの場合
      myhostname = 192.168.1.2.example.com
      mydomain = example.com
    • 下記のようなwarningが出るが、受信はできた
      warning: do not list domain [192.168.1.2] in BOTH mydestination and virtual_alias_domains
      warning: do not list domain 192.168.1.2.example.com in BOTH mydestination and virtual_alias_domains
  • メール受信時に、他のプログラムにメールの内容を渡す

2008年2月26日火曜日

Rubyで受信メールを解析する

ライブラリTMailを使う。
標準では入っていないのでインストールする。

gem install tmail

実験用プログラム
$KCODE = 'sjis'

require "tmail"
require "base64"

arg = ARGV[0]
path = arg[4, arg.size]

mail = TMail::Mail.load(path)

log = open("/tmp/receiveVideo/test.log", "w")

log.puts "From:" + mail.from.to_s
log.puts "To :" + mail.to.to_s
log.puts "Subject:" + mail.subject

def parse(part, log)
 if part.multipart?
  part.parts.each do |p|
   parse(p, log)
  end
 else
  if part.content_type == "text/plain"
   log.puts "Body:" + part.body
  else
   attach = open(part.main_type + "_" + part.encoding + "." + part.sub_type, "w")
   if part.main_type == "text"
    attach.write(part.body)
   else
    attach.write(Base64.decode64(part.body))
   end
   attach.close
  end
 end
end

parse(mail, log)

log.close

添付の動画のデコードがうまくできない。なぜ?


参考:
 メールで送った画像をサーバに保存させる
 TMail の使い方
 class TMail::Mail (リファレンス。古いバージョン?)
 RubyでBase64 - 今日覚えたこと (Base64について)
 packテンプレート文字列 (データのpackについて)

2008年2月3日日曜日

Windowsの PHPの sendmail_from

php.iniにあるWindows専用の設定"sendmail_from"と関数mail()/mb_send_mail()について。

メールアドレスをセットしておくと、そのメールアドレスがmail()やmb_send_mail()で送るメールのFrom、Return-Path、それにSMTPのMAIL FROM(エンベロープFrom) として使われる。

sendmail_fromがセットされていない場合、mail()/mb_send_mail()の第4引数の中で指定するメールheaderの中のFromが、Return-PathやエンベロープFromにも使われる。
その場合にFromにメールアドレスだけでなく表示名(例:山田 <foo@example.com>)も付けている場合は、メール送信に失敗する。
Fromの表示名も使いたい場合、メールheaderには表示名付きのFromをセットし、エンベロープFromには ini_set("sendmail_from", $from) でメールアドレスのみのFromをセットすればOK。

sendmail_fromもheaderの中のFromもセットされていない場合、メールの送信はできない。(Warning "sendmail_from" not set in php.ini or custom "From:" header missing in ... になる。)

2007年12月1日土曜日

メールアドレスのドメイン部分の最大文字数

PostPetメールアカウントでは21文字以上になるので注意。30文字くらいまで許したほうが無難。

2007年10月19日金曜日

PHPで(できるだけ)正しいメールアドレスをチェックする正規表現

2008/02/07 修正 (

  • Blogger投稿時に、バックスラッシュ2つが1つに変換されていた(全角で掲載することにより回避。全角の¥は半角に読み替えてください!)
  • domainの先頭は数字でもOKにした(ドメイン制限の緩和に合わせた)
  • domainのlabelの最後に?を追加(漏れていた)
)


何回か挫折したけどもう一度チャレンジしてみた。
RFC 2822を読み解くのは辛いので、基準として「正しい方法」でメールアドレスを確認するには - J0hn D0e の日誌に書いてある『「正しいメールアドレスの条件」10か条』をなるべく満たすことを目指した。

できたのはこれ。
preg_match('/^([-!#-¥¥'*+¥¥/-9=?^-~]+(¥¥.[-!#-¥¥'*+¥¥/-9=?^-~]+)*|"([]-~!#-[]|¥¥¥¥[ -~])*")@[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?(¥¥.[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?)*¥¥.([a-z]{2,4}|museum)$/i', $value)


10か条のうち、1~4と6~8を満たしている(と思う)。
以下は未対応
  • 10は正規表現では無理
  • 5と9も正規表現では無理だよね?
  • 3(quoted-string)については、RFC 2822を見た感じではlocal-part全体がquoted-stringの場合のみ使えるように見えるけど、symfonyではlocal-partの一部としてもquoted-stringを許しているのは何故?
  • 4(quoted-pair)については、RFC 2822を見た感じではquoted-string内でのみ使えるように見えるけど、「正しい方法」でメールアドレスを確認するにはを読んだ感じだとlocal-part内ならどこでも使えるみたいに書いてあるからそうなのかな???

現実問題としては、DoCoMo(Softbankも?)はRFC2822違反のメールアドレスでも登録できてしまうので、下記のような"DoCoMo版メールアドレス"は上記の正規表現ではエラーになってしまう。
  • ドットで始まる
  • ドットが連続する
  • @の前がドット


ついでに、上記の正規表現を生成したPHPのソースコードはこちら。
(コメントの番号は10か条の番号に対応)
<?php
if (!$m = $_REQUEST['m']) $m = 'test@example.com';

//local part
$atext = "[-!#-'*+/-9=?^-~]";
$atom = $atext . '+';
$dot_atom = $atom . '(¥¥.' . $atom . ')*'; //2

$qtext = '[]-~!#-[]';
$text = '[ -~]';
$quoted_pair = '¥¥¥¥' . $text; //4
$quoted_string = '"(' . $qtext . '|' . $quoted_pair . ')*"'; //3

$local_part = '(' . $dot_atom . '|' . $quoted_string . ')';

//domain
$label = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?'; //7, 8
$domain = $label . '(¥¥.' . $label . ')*¥¥.([a-z]{2,4}|museum)'; //6

//全体
$addr_spec = $local_part . '@' . $domain; //1

$regexp = '/^' . str_replace('/', '¥¥/', $addr_spec) . '$/i';
?>

正規表現<br />
<?php echo $regexp; ?>
<hr />

preg_match('<strong><?php echo str_replace(array("'", '¥¥'), array("¥¥'", '¥¥¥¥'), $regexp); ?></strong>', $value)
<hr />

<form action="regex.php">
<input name="m" value="<?php echo htmlSpecialChars($m, ENT_QUOTES); ?>" />
は、正し<?php echo (preg_match($regexp, $m) ? 'い' : 'くない') ?>メールアドレスです。
</form>


一般的には、これくらいやれば十分でしょう。
preg_match('/^[-+¥¥w]+(¥¥.[-+¥¥w]+)*@[-a-z0-9]+(¥¥.[-a-z0-9]+)*¥¥.[a-z]{2,6}$/i', $value)


DoCoMoも救済するならもう少しシンプルになる。実際に使うならこれで。
local-partに入れる記号は"-_."くらいが一般的で、Gmailerは"+"も使うからそれぐらい対応すれば99%くらいはカバーすると思う。これでダメなメールアドレスは弾いちゃった方が何かと安心な気がする...。
preg_match('/^[-+.¥¥w]+@[-a-z0-9]+(¥¥.[-a-z0-9]+)*¥¥.[a-z]{2,6}$/i', $value)


参考:
 「正しい方法」でメールアドレスを確認するには - J0hn D0e の日誌
 http://www.puni.net/~mimori/rfc/rfc2822.txt (Internet Message Format)
 ASCII文字コード : IT用語辞典
 正規表現
 perlre - Perlの正規表現
 re: PHPでメールアドレスかどうか調べる方法 (ハズレ日記)

2007年10月6日土曜日

XMailでRFC違反のDoCoMoのメールアドレスに送受信

 XMailで下記のようなメールアドレスに送受信できないという問題が発生。

  • ドットが連続する (例:foo..bar@docomo.ne.jp)
  • アットマークの前にドットがある (baz.@dodomo.ne.jp)
 これらはRFC2822というメールアドレス(の一部?)の規約に反してるらしい。

 同じ問題で困っている人はいるらしく、探してみたらxmailserver.jpの掲示板で見つけた。
  RFC2822違反のメールアドレス

 要約すると、

 Postfixでも同様の問題が発生するけど設定で回避可能、sendmailやqmailではこの問題は発生しないらしい。
 XMailは海外のソフトだから東洋の島国の1キャリアの勝手に付き合って仕様を変えてくれないだろうな。今後はXMailがバージョンアップするたびに誰かがパッチを作り続けるのかな...

2007年8月29日水曜日

mb_send_mail()のための参考サイト

 PHPのマニュアルにも細かく説明が書いてないmb_send_mail()。調べたついでに参考サイトをまとめておく。

 基本的な使い方はここが分かりやすい。余分なものがなくていい。

離れPHP島

 CCやBCCなど、ちょっと凝ったことをやる場合はたいてい、headersにその情報を追加する。このときヒアドキュメントを使うとなかなかスマート。ヒアドキュメントってほとんど使わないけど、この使い方はなかなか良い。

STUDIO WING .lib: PHP:mb_send_mail()関数

 差出人の名前に日本語表示を付ける方法はここを参考に。やったことないけど。

PHPで日本語メールを送る - 基本編 - EC studio 技術ブログ

2007年8月22日水曜日

PHPでメールサーバを使わずにメール送信

 Windows用ツールの話。PHPでmb_send_mail()やmail()でメールを送信する場合、たいていはphp.iniで指定したメールサーバを使ってメールを送信する。XMailとかでメールサーバを立てればいいんだけど、それも面倒だという場合に便利そうなツールがあった。

sendまね~る(sendmane.exe) の使い方

 メールクライアントとして振舞うので、プロバイダやYahooとかのメールアドレスがあればメールを送信できるみたい。
 php.iniにはsendmail_pathは"For Unix only"って書いてあるけどWindowsでも使える。(PHPマニュアルにも書いてある。)そこでこのツールを指定する。オプションも指定する。(詳細はリンク先参照)

 どこかのサイトに非商用に限って使えるというようなことが書いてあったので商用利用はたぶん禁止なのだろう。

ブログ アーカイブ

tags