それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

メールをProxyしてGmailで送るSMTPプロキシサーバー。

家庭用Faxをe-mailに転送機能が付いたブラザー複合機買った。A3の印刷が出来るってことで買った。楽しみにしてたブラザーのFAX→メール転送機能はSTMP over SSLに非対応だった。残念だった。非常に残念だった。仕方ないから返品しようかと思ったけど、それくらいRubyで何とかすればいいじゃない?っていう悪魔のささやきが聞こえた。

SMTPをフォワードするためのSMTPを書いた。

SMTPって最近規制が多いので従来のパッケージでは動かないことも多いので、いい機会だからプロキシサーバーを書いておいた。
これを使えば、任意のメールサーバーをリレーできる。PostfixやQmailで設定してもいいけどさ、Postfix面倒だし。C言語があまりできない僕は、デバッグが大変なのでRubyでパパっとやることにした。

smtpを立てて、メールが来たらGmailで送り直す。

  • SMTPを立てる。(mini-smtp-server)
  • メール受信する
  • new_message_eventが実行される
  • メールの書式に戻す
  • Gmailで送り直す。

簡単ですね。昔は.forwardで解決したことですが、OBP25規制や、SMTP認証あと、暗号化通信がついてるので最近は結構面倒だったりする。

GmailにforwardするだけのSMTPサーバー

#!/usr/bin/env ruby
# coding: utf8
require 'rubygems'
require 'net/smtp'
require 'mini-smtp-server'
require "tlsmail"

class GMailForwarderServer < MiniSmtpServer

  def new_message_event(message_hash)
    puts :recieved
    puts :mail
    puts "-"*100
    puts message_hash.inspect
    puts "-"*100
    puts :forwarding
    mail_to      = message_hash[:to].match( %r"<([^>]+)>").to_a[1]
    puts mail_to
    mail_from    = message_hash[:from].match( %r"<([^>]+)>").to_a[1]
   
    puts mail_from
    mail_encoded = message_hash[:data]
    puts mail_encoded
    Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
    puts :tls_enabled
    Net::SMTP.start( "smtp.gmail.com", 587, "local","account@gmail.com", "**gmail-password**", "plain" ){|smtp|
          smtp.sendmail( mail_encoded, mail_from, mail_to )
        }
    puts :forwarded
  end

end

server = GMailForwarderServer.new(25,"localhost", 1)
server.start
server.join

実運用時のポイント

init.dの init スクリプトに登録した。 (upstartでもいい。upstartならdaemonsパッケージも不要だしね。)

Daemons.run_proc("smtp_proxy_server"){
      server = GMailForwarderServer.new(25,"192.168.119.22", 1)
      server.start
      server.join
 }


この時に localhostだと、外部からの接続を受け付けないので注意です。

メールのプロキシサーバーってひとつ持ってると便利ですよ。

メールのプロキシサーバーってひとつ持ってると便利ですよ。

  • メールが来たら◯◯するとか
  • ◯◯が終わったらメールするとか。

そういう処理をメールに集約できるので、処理のメッセージングがとても便利です。


railsアプリでメール送信時にSMTPがちゃんと動作するか見るとか。
キャリア絵文字を変換するためにGmailにわざと転送(プロキシ)するとか。


何かと便利です。

本気モードでPostfix使えばキューも付いてくるのである意味分散処理的だし。
処理のメッセージングなんてメールでいいんですよ。

家電向け

メール機能が付いてるけど、SMTPSやAUTHに非対応の家電をちゃんと活用するのに便利。
プロキシをクラウド側やVPSで起動しておいてもいいですね。