Google Cloudのドキュメントに従って、SendGrid経由でメールを送信する設定を行う。
まず、PostFixをインストールする。プロンプトが表示されたら、[Local Only] の構成を選択し、デフォルトのドメイン名を受け入れる。

# apt install postfix libsasl2-modules

/etc/postfix/main.cfを編集し、以下の行をコメントアウトする。

# smtp_tls_security_level=may
# relayhost = 
# default_transport = error
# relay_transport = error

以下の行を最後に追加する。

relayhost = [smtp.sendgrid.net]:2525
smtp_tls_security_level = encrypt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
header_size_limit = 4096000
smtp_sasl_security_options = noanonymous

Google Cloud Marketplaceを使用して、SendGridメールサービスに登録する。
[Settings] > [API Keys] でAPIキーを作成し、そのキーを下記の{API_KEY}の部分にコピペしてファイルをパスワードファイルを修正し、有効化。

# echo [smtp.sendgrid.net]:2525 apikey:{API_KEY} >> /etc/postfix/sasl_passwd
# postmap /etc/postfix/sasl_passwd
# chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

動作確認のためmailutilsをインストールし、テストメールを送信し正しく動作することを確認する。

# apt install mailutils
# echo "test mail" | mail -s "test" xxx@xxx.xxx

届いたメールを確認すると、

SPF:	PASS(IP: 198.37.146.154)
DKIM:	'PASS'(ドメイン: sendgrid.net)

となっており、自分でSPFやDKIMの設定を行わなくても大丈夫となっている。メールはデフォルトのドメイン名から「sendgrid.net 経由」で送られていることが表示される。

この手順でメールの設定をすると、送信はできるけれども受信は上手くいかない。結局は以前の設定と同じように設定し、以下の設定を追加しFirewall設定でsmtpのポートを開けることで、SendGrid経由の送信とGoogle Cloud Engineの受信ができるようになった。

###########################
#  Settings for Sendgrid
###########################
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
relayhost = [smtp.sendgrid.net]:2525
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
#smtp_tls_security_level = may
smtp_tls_security_level = encrypt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
header_size_limit = 4096000

Vultrのサーバでmailmanを使用していたときは自分でSPFやDKIMの設定を行っても配信メールがスパム扱いになってしまっていたが、こちらはそんな事もなく楽チン。