php

Mac OSX Yosemite のXamp5.6.3でメール送信

長野県 WEB制作

こんにちは。

今回は、Mac YosemiteのXamppでPHPからメール送信可能な状態に設定します。

MacにはPostfixが予めインストールされているため、
Gmailを使って簡単設定でメール送信サーバを構築します。

Postfixの設定

まず、Postfixの設定をすすめていきます。

デフォルトのチェック

ターミナルで下記のコマンドを実行します。
エラーメッセージが出なければ問題ありませんです。

$ sudo postfix check

リレーサーバーを設定

メールを送信出来るようにするため、外部のメールサーバー(この場合はGmail)へリレーする設定を追加します。
postfixの設定ファイルをいじります。

$ sudo vi /etc/postfix/main.cf

下記の内容を最下部に追記

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes 
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
tls_random_source=dev:/dev/urandom

sasl用のパスワードファイルにGmailのアカウントを追記

Postfixからのメール送信をGmail経由にて送るため、sasl用のパスワードファイルにGmailのアカウントを追記します。

$ sudo vi /etc/postfix/sasl_passwd

上記コマンドで作成されたファイルに下記内容を追記

[smtp.gmail.com]:587 アカウント名@gmail.com:パスワード

作成したファイルにpostmapコマンドを使って、アカウントのテーブルファイルを作成します。

# sudo postmap /etc/postfix/sasl_passwd

設定ファイルのチェック&再起動

$ sudo postfix check
$ sudo postfix reload

送信テスト

メールの送信テストを行います。
正常に送信出来ない場合は、上記までの手順を見なおしてください。
ちなみにログ・ファイルは → /var/log/mail.log

$ date | mail -s test アカウント@gmail.com

Xamppの設定

あとはXamppの設定をして、メールを送信します。

php.iniの編集

sendmail_path を変更します。

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =
sendmail_path = "env -i /usr/sbin/sendmail -t -i"

送信テスト

最後にメールの送信テストプログラムを実行します。

<?php
if (mail("example@example.com", "TEST MAIL", "This is a test message.", "From: from@example.com")) {
  echo "メールが送信されました。";
} else {
  echo "メールの送信に失敗しました。";
}

SwiftでGmailにSMTP接続でエラー

こんにちは

 

ローカルマシンのXampp環境でGmailアカウントを使用して、

Swiftでメールを送信したら、こんなエラーがでました。

SwiftMailer SMTP TLS OpenSSL Error SSL3_GET_RECORD:wrong version number

原因は、PHP5.6からクライアントストリームで、ピア検証がデフォルトで有効になったためです。
今回はローカルマシンでの対応なので、verify_peerをfalseにして送信してしまいます。

修正箇所は、Swiftのファイルを直接修正します。

対象ファイルこれ↓
ib/classes/Swift/Transport/StreamBuffer.php

263行に付近をこんな感じに修正します。

if (!empty($this->_params['sourceIp'])) {
    $options['socket']['bindto'] = $this->_params['sourceIp'].':0';
}
$options['ssl'] = ['verify_peer' => false];// これを追加
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
if (false === $this->_stream) {

これでとりあえず遅れるようになります。