Tech Racho エンジニアの「?」を「!」に。
  • インフラ
  • 開発

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

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

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

#!/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!!’;
}
}

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。