別の方が作成したメールフォームを移行しています。
そのメールフォームはPHPのmail関数を使用してメールを送信しています。
ある事情から移行先ではGmailのSMTPサーバーを使用してSMTP認証でメールを送信したいのですが、調べてみたらPHPのmail関数でSMTP認証するのは大変そうなことが分かりました。
また、メールフォームのプログラムは複雑に作り込まれていて、できれば手を加えたくありません。
サーバーの設定あるいはPHPの設定で何とかなる方法はないでしょうか。
移行先のサーバーはさくらのレンタルサーバーです。
※以下、追記内容となります。
あまり詳しくないので、上手く説明できないのですが・・・。
メールフォームの管理者宛てメールアドレスが「info@example.com」とします。
この「info@example.com」はGSuiteを使用しています。ビジネス用Gmailみたいなものです。
メールフォームのWEBサーバーはさくらのレンタルサーバーで、ドメインは「https://example.com」となります。
ドメインはお名前で管理しています。
mail関数(sendmail)で「info@example.com」に送信しようとすると、
メールアドレスがWEBサーバーと同一ドメインなのでGmailのほうではなく、
サーバー内部のメールアドレスへ送信しようとしてしまうらしく、Gmail側にメールが届きません。
さくらのレンタルサーバー側には「info」のメールアドレスは作成していません。
下記URLと同じような状況です。
参照:同一ドメインで、Webとメールを別サーバで運用したときのメール送信問題
上記のような理由により、sendmailではなくSMTP認証にて外部SMTPサーバーを使用してメールを送信したいのです。
今回はその外部SMTPサーバーがGmailのSMTPサーバーとなっています。
ちなみにメール送信部分のコードは以下の通りです。
PHP
1 function sendmail($from, $to, $reply_to, $subject, $body, $mail_encode = 'UTF-8') { 2 3 $this->message = null; 4 $this->mail_encode = strtoupper($mail_encode); 5 $encode_from = $this->_encodeHeader('From', $from); 6 $encode_to = $this->_encodeHeader('To', $to); 7 $encode_reply_to = $this->_encodeHeader('Reply-to', $reply_to); 8 $encode_subject = $this->_encodeHeader('Subject', $subject); 9 $encode_body = $this->_encodeBody($body); 10 $matches = null; 11 12 if(preg_match('/<([0-9a-z\.\-_]+@[0-9a-z\.\-_]+)>$/i', $to, $matches)) $to = $matches[1]; 13 14 $mail_header = array(); 15 $mail_header[] = 'From: ' . $encode_from; 16 $mail_header[] = 'MIME-Version: 1.0'; 17 $mail_header[] = 'Content-Type: text/plain; charset='. $this->mail_encode; 18 $mail_header[] = 'Content-Transfer-Encoding: ' . (strcmp('UTF-8', $this->mail_encode) == 0 ? 'base64' : '7bit'); 19 20 if(strlen($encode_reply_to) > 0) $mail_header[] = 'Reply-To: ' . $encode_reply_to; 21 22 $send_mail = mail($to, $encode_subject, $encode_body, trim(join($this->eol, $mail_header))); 23 24 if($send_mail !== true) $this->message = $send_mail; 25 26 return $send_mail; 27 }



回答3件
あなたの回答
tips
プレビュー