読者です 読者をやめる 読者になる 読者になる

独自ドメインのメールをGoogle Appsに移行するときのメモ

これまで自前のサーバで運用してた独自ドメインのメールサーバを、Google AppsGmailに移行しました。その際に行った作業とハマッたことのメモです。特にGmailを使わずにメールソフトからアクセスする場合には、結構クセのある仕様になってるので移行前に注意が必要です。

メーリングリストに送信したメールが自分あてに届かない

Google Appsのグループ(メーリングリスト)宛てに、GmailSMTPサーバ(smtp.gmail.com)から送信したメールは、自分自身には配信されない仕様のようです。これはGoogle AppsGmailに限った話ではない様ですが、いままでGmailのWebインタフェース以外を使用したことがなかったので気づきませんでした。

SMTPサーバから送信したメールでもGmailで確認すると"送信済みメール"に入っており関連するメッセージのスレッドにも表示されるためのようです。Google Appsだと必ずしも全員がGmailを使うわけではなく、いままで自分が使っていたメールソフトを使用してPOP/IMAPでアクセスするという人も多いので、これは不便だと思います。

  1. GmailSMTPサーバ以外からメールを送信する
  2. bccに自分のアドレスを入れる

このどちらかの方法で回避しています。

POPでメッセージをサーバーに残せない

複数個所からPOPでアクセスする場合など、メールソフトの"メッセージをサーバーに残す"という設定を使用しますが、この設定だけではサーバにメッセージを残すことができません。加えてPOPでログインする際のアカウントの先頭に"recent:"をつける必要があります。サーバにメッセージを残せるようになります。ただし、30日以内のメッセージのみのようです。

IMAPでアクセスすると「web login required」と表示される

IMAP経由で大量のメールのコピーなどを行うと「web login required」と表示されアカウントがロックされることがあります。その場合には、以下のURLにアクセスしてロックを解除あする必要があります("your_domain.com"には独自ドメインを指定)。

https://www.google.com/a/your_domain.com/UnlockCaptcha

SPFの設定

Gmailを使用する場合にはDNSの設定でMXレコードを追加しますがついでにSPFの設定も行いました。

example.com.              86400   IN      TXT     "v=spf1 a mx a:mail.example.com include:_spf.google.com ~all"

こんな感じにしておきました。余計な記載があるかもしれませんが、私の環境でのポイントとしては、

  • "include:_spf.google.com"は、smtp.gmail.comからメールを送信する場合に認証できるようにするための設定です。
  • "a:mail.example.com"についてはこれまで使っていたメールサーバについての設定です。

Sender ID:送信者側の設定作業 −@IT
独自ドメインのメール送信を SPF に対応させる方法 - WebOS Goodies

プログラムからGmailSMTPサーバを利用する

具体的には、CDO.Messageを使用してVBScriptからメールを送信する方法です。

Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "テスト"
objMessage.From = "test@example.com"
objMessage.To = "info@example.com"
objMessage.TextBody = "テストメールです。"

objMessage.Configuration.Fields.Item _("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

' SMTPサーバ
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
'認証を使用するかどうか
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'ユーザID
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "test@example.com"
'パスワード
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "パスワード"
'ポート番号
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = "465"
'SSLを使用するかどうか
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
'コネクションタイムアウト
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
'送信
objMessage.Configuration.Fields.Update
objMessage.Send

SSLを使用する場合にはポート番号を465とします(TLSではない)。
what's the difference btw. port 465 and 587 of the google apps mails - Learn More | Google グループ

また、デフォルトではFromで指定したアドレスとSMTPサーバで認証時のユーザIDは同じものになります(別のアドレスにしても認証時のユーザIDになります)。fromに別のアドレスを指定できるようにするためには、Webインタフェースの設定のアカウントにてそのメールアドレスを追加します。
独自に設定した From アドレスの追加 - Gmail ヘルプ
この場合でもSenderフィールドには認証時のユーザIDが設定されます。

実際のところ送信専用のアカウントを一つ作ってそれから送信する運用になるかと思いますが、smtp.gmail.comを使うとレイテンシが高くて、送信件数の制限などもあるようなので、本格的に使うのであれば自前のサーバの方がよいと思いました。