vagrant postfix設定　ローカルからメール送信　（備忘録）

# vagrant postfix設定　ローカルからメール送信

◆やりたいこと 
 **vagrantのローカル環境からgmail経由でメールを送信したい**
 **ついでにmailtrap使っちゃおう**

◆使用ツール 

:::note info
 ・vagrant
 ・postfix
 ・gmail
 ・mailtrap
:::

## mailtrapのアカウント取得
ここにアクセス、sign upしてアカウントを取得する。

https://mailtrap.io/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56318/2b48137a-50fc-61a3-bccc-a642801395df.png)

何でも良いと思うがGoogleアカウントがあればそちらで取れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56318/4f751fff-2f7e-452a-680a-c4e5664cfce5.png)

アカウントが取得出来たら「SMTP Setting」＞「Integrations」で「postfix」を選択する。<br>一番下に表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56318/121fe5f6-e5e2-b03d-fcfb-c8fe4e331793.png)

こんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56318/7d9c73d8-5205-97c8-3dae-3d0e01af1e7d.png)

とりあえずここまで設定したら次はvagrant側を調整




## vagrant側の設定方法
※すでにvagrantでいろんなツールをインストールしている状態からスタート
※バックアップは取得した状態


## 現在のpostfixの確認
```lang:確認1
sudo rpm -qa | grep postfix
```

## 現在のpostconfの確認
```lang:確認2
/usr/sbin/postconf -a
```

## 現在のcyrus-saslの確認<br>（3つくらいしかないはずなので↓をインストールする）
```lang:インストール1
sudo rpm -qa | grep cyrus-sasl
```

## その他必要なツールのインストール
```lang:インストール2
sudo yum -y install cyrus-sasl-md5 cyrus-sasl-plain
```

◆/etc/postfix/main.cfファイルの編集
```lang:vim
sudo vim /etc/postfix/main.cf
```

# 116行目　inet_interfaces = localhostを編集
```lang:vim
inet_interfaces = all
```

# 119行目　inet_protocols = allを編集
```lang:vim
inet_protocols = ipv4
```

## mailtrapを使う場合

表示された設定を追加していく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56318/7d9c73d8-5205-97c8-3dae-3d0e01af1e7d.png)

※なお、最後の起動方法はOSによって異なるので注意<br>自分の環境の場合は下で起動、再起動ができる。

```lang:Terminal
sudo systemctl start postfix.service
sudo systemctl restart postfix.service
sudo systemctl status postfix.service
sudo systemctl enable postfix.service
```

## Gmailを使う場合

### 318行目　以下を追加

```lang:vim
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_sasl_security_options = noanonymous
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
```

## vim sasl_passwdファイル作成
```lang:設定2
[smtp.gmail.com]:587 example@gmail.com:パスワード
※Gmailパスワードは2段階認証のパスワードを使用

※/etc/postfixにて以下コマンド実行→sasl_passwdファイルをdb化
postmap sasl_passwd

※上記のmain.cfで余計な半角スペースなどが入っているとうまくビルドされない。
```

## service postfix start（root権限で実行）
```lang:linux
service postfix start
```

## mailコマンドでテストメールを送信
```lang:mailコマンド
[root@vagrant-centos65 postfix]# mail メールアドレス
Subject: test
test
.
EOT
[root@vagrant-centos65 postfix]#
```


## 送信結果
```lang:maillog
◆ログに「status=sent」と出ており送信OK

Jul 20 14:47:36 vagrant-centos65 postfix/smtp[4148]: 7348665CEE: to=<taiti@stone-rise.com>, relay=smtp.gmail.com[74.125.23.109]:587, delay=4.3, delays=0.05/0.28/2.2/1.8, dsn=2.0.0, status=sent (250 2.0.0 OK 1437371256 a10sm19321215pdn.57 - gsmtp)
Jul 20 14:47:36 vagrant-centos65 postfix/qmgr[4142]: 7348665CEE: removed
```

## エビデンス
![2015-07-20_145542.png](https://qiita-image-store.s3.amazonaws.com/0/56318/9494e4b5-7eac-68ab-3d7a-d05235aaecf9.png)


## 今後の課題
avastが警告を出しているので今後はそちらを外すようにする。

## ◆ハマったところ
postfix main.cfファイルの設定で
余計な部分を編集してしまったのだと思いますがメールが送信できませんでした。 
おそらくinet_interfacesこの部分の設定が余計だったのかと。。。
詳細はわかりませんが。。。

※念のため以下ログを添付しておきます。 

```lang:maillog
Jul 18 14:00:59 localhost postfix/pickup[21524]: 4BFB920060E: uid=0 from=<root>
Jul 18 14:00:59 localhost postfix/cleanup[21529]: 4BFB920060E: message-id=<20150718140059.4BFB920060E@localhost.localdomain>
Jul 18 14:00:59 localhost postfix/qmgr[21525]: 4BFB920060E: from=<root@localhost.localdomain>, size=447, nrcpt=1 (queue active)
Jul 18 14:00:59 localhost postfix/error[21531]: 4BFB920060E: to=<test@hoge.com>, relay=none, delay=0.03, delays=0.02/0/0/0, dsn=5.0.0, status=bounced ([smtp.gmail.com]:587)
Jul 18 14:00:59 localhost postfix/cleanup[21529]: 505B0200631: message-id=<20150718140059.505B0200631@localhost.localdomain>
Jul 18 14:00:59 localhost postfix/qmgr[21525]: 505B0200631: from=<>, size=2248, nrcpt=1 (queue active)
Jul 18 14:00:59 localhost postfix/bounce[21532]: 4BFB920060E: sender non-delivery notification: 505B0200631
Jul 18 14:00:59 localhost postfix/qmgr[21525]: 4BFB920060E: removed
Jul 18 14:00:59 localhost postfix/local[21534]: 505B0200631: to=<root@localhost.localdomain>, relay=local, delay=0.01, delays=0/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Jul 18 14:00:59 localhost postfix/qmgr[21525]: 505B0200631: removed
```

## php.iniの編集箇所

```lang:php.ini
336行付近：expose_php = On　→　expose_php = Off

※phpの使用メモリ設定
396行付近：memory_limit = 126M →　memory_limit = 2M

※エラーLevelの設定 
453行付近：error_reporting = E_ALL　追加

※確かエラーの表示
469行付近：display_errors = Off → display_errors = On

※エラーログの出力（apacheの設定も必要のようです）
577行付近：error_log = syslog → error_log = /var/log/php.log

※画像の一時アップロードディレクトリ指定
789行付近：upload_tmp_dir = /var/www/html/php/tmp/

※画像ファイルアップロードマックサイズ
791行付近：upload_max_filesize = 2M → upload_max_filesize = 2000M

※画像ファイルのアップロード設定　複数アップの設定が可能（とりあえず50ファイルとしてみます。）
794行付近：max_file_uploads = 20　→　max_file_uploads = 50

※時刻合わせ（タイムゾーンの設定）
869行付近：date.timezone = Asia/Tokyo

※postfixとの連携設定（gmail経由）
950行付近：SMTP = localhost　→　SMTP = smtp.gmail.com

※ポート変更
952行付近：smtp_port = 25　→　smtp_port = 587

※送信するメールアドレスの設定（メールアドレスは任意で設定）
959行目付近：sendmail_from = hoge@hoge.com　追加

※メールログの設定はなし（/var/log/maillogを確認すればよい）

※自動でセッションを取得する設定（任意で設定 1 にすると自動的にセッションを取得する）
1376行付近：session.auto_start = 0　

※文字コードの設定　基本的にコメントアウトをはずす（UTF8が基本）
1632行目付近：mbstring.language = Japanese
1638行目付近：mbstring.internal_encoding = UTF-8
1642行目付近：mbstring.http_input = auto
1647行目付近：mbstring.http_output = UTF-8
1655行目付近：mbstring.encoding_translation = On
1660行目付近：mbstring.detect_order = auto
1665行目付近：mbstring.substitute_character = none;
1676行目付近：mbstring.func_overload = 0
```

## 以下参考担った記事

[PHPの使用メモリに関して資料](http://mitsukuni.org/blog/2009/01/16/php%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E5%89%B2%E5%BD%93%E9%87%8F%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)

[expose_phpの設定について説明](http://www.atmarkit.co.jp/ait/articles/1201/05/news114.html)

[errorlogの出力について参考](http://qiita.com/junpei_iwa/items/8dc9f62b4118186cf2df)

[errorlogのLevel設定](http://blog.thingslabo.com/archives/000184.html)

[errorLevelの種類](http://phpspot.net/php/man/php/function.error-reporting.html)