ステージング用の、ブラックホールSMTPサーバー

Webアプリケーションのステージング環境において、本番データの移行などを行った場合、
誤って本番ユーザーにメールが飛ばないようにしたいことがあります。
そこで、完全にメールが飛ばない設定にすると、
今度、メール認証が必要なフロー(例:会員登録)が確認できなくて、不便です。

そこで、全てのメールをリレーせずにフックして、
開発用のメーリングリストに投げる簡単なSMTPサーバーを書いてみました。
一時的にこのSMTPサーバーを使うようにすれば、
本番ユーザーにメールが飛ぶことはなく、
かつメーリングリストで開発者には届くので便利です。
メールの送信にはGMailを使っています。

[perl]
#!/usr/bin/perl

use Carp;
use Net::SMTP;
use Net::SMTP::SSL;
use Net::SMTP::Server;
use Net::SMTP::Server::Client;

my $to = ‘mailing_list@example.com’;
my $gmail_account = ‘username’;
my $gmail_password = ‘password’;

my $server = new Net::SMTP::Server(‘localhost’, 25) ||
croak(“Unable to handle client connection: $!\n”);

while($conn = $server->accept()) {
my $client = new Net::SMTP::Server::Client($conn) ||
croak(“Unable to handle client connection: $!\n”);

$client->process || next;

my $smtp = Net::SMTP::SSL->new(‘smtp.gmail.com’, Port => ‘465’, Debug => 1);
if($smtp->auth($gmail_account, $gmail_password)){
$smtp->mail($client->{FROM});
$smtp->to($to);

$smtp->data();
$smtp->datasend($client->{MSG});
$smtp->dataend();
$smtp->quit;

}else{
print ‘SMTP Server Authentication Error!!’;
}
}
[/perl]

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ