質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5868閲覧

【PHP7】PHPMailerを用いたメール送信

PonCotsu

総合スコア9

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/02/14 20:50

編集2020/02/14 21:27

PHP7でメール送信機能を作りたいと考えております。
ロリポップのSMTPサーバーとPHPMailer(6系)を使ってメール送信をしたいのですが、
PHPMailerのReadMeの例を読んで、その通りにやって ロリポップFTPサーバーにあげてURLを読み込んでみてもメールが送られずエラーが表示されます。
どこの情報が足りないのか(あるいはそもそも間違っているのか)、よくわからないので教えてくれると嬉しいです。

スクリプトにおいてはコメント欄に僕の疑問点が書いてあります。回答で答えてくれると助かります。

PHP

1 2 3<?php 4// Import PHPMailer classes into the global namespace 5// These must be at the top of your script, not inside a function(ここはなんのために?) 6use PHPMailer\PHPMailer\PHPMailer; 7use PHPMailer\PHPMailer\SMTP; 8use PHPMailer\PHPMailer\Exception; 9 10 11 12//サンプルサイトをみているとここに、requireもしくはrequire_onceでここにException.php, OAuth.php, PHPMailer.php, POP3.php, SMTP.php,phpmailer.lang-ja.phpを読み込んでいる。 13require_once('PHPMailer/src/SMTP.php'); 14require_once('PHPMailer/src/OAuth.php'); 15require_once('PHPMailer/src/Exception.php'); 16require_once('PHPMailer/src/POP3.php'); 17require_once('PHPMailer/src/PHPMailer.php'); 18require_once('PHPMailer/language/phpmailer.lang-ja.php'); 19 20 21 22// Load Composer's autoloader 23// require 'vendor/autoload.php'; //autoload.phpがどこにも見つからないのはなぜ...?ダウンロードしたコンテンツ内になかったのでコメント化しないとページがそもそも開けませんでした 24 25// Instantiation and passing `true` enables exceptions 26$mail = new PHPMailer(true); 27 28try { 29 //Server settings 30 $mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output 31 $mail->isSMTP(); // Send using SMTP 32 $mail->Host = 'smtp.lolipop.jp'; // Set the SMTP server to send through(ロリポップSMTPサーバー) 33 $mail->SMTPAuth = true; // Enable SMTP authentication 34 $mail->Username = 'xxx@xxxx.jp'; // SMTP username(ロリポップのSMTPサーバーのメールアカウント) 35 $mail->Password = '********'; // SMTP password(メールアカウントのパスワード) 36 $mail->SMTPSecure = 'ssl'; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted(ssl接続) 37 $mail->Port = 465; // TCP port to connect to(ポート番号) 38 39 //Recipients 40 $mail->setFrom('xxx@xxxx.jp', 'Mailer'); //送信元のアドレスと送信者名(この場合、ロリポップのwebメールアドレス?) 41 $mail->addAddress('xxxxx@gmail.com', 'Joe User'); // Add a recipient(送信先と受信者名。この場合、Gmailアドレス?) 42 // $mail->addAddress('ellen@example.com'); // Name is optional(追加で送りたいアドレス) 43 // $mail->addReplyTo('info@example.com', 'Information'); 44 // $mail->addCC('cc@example.com'); 45 // $mail->addBCC('bcc@example.com'); 46 47 // Attachments 48 // $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments 49 // $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name 50 51 // Content 52 $mail->isHTML(true); // Set email format to HTML(ここはよくわからない。) 53 $mail->Subject = 'Here is the subject'; 54 $mail->Body = 'This is the HTML message body <b>in bold!</b>'; 55 $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 56 57 $mail->send(); //Webページに訪れた際に送信に成功したら'Messaga has been sent'が表示され、失敗したら'"Message could not be sent. Mailer Error: {$mail->ErrorInfo}"が表示される。' 58 echo 'Message has been sent'; 59} catch (Exception $e) { 60 echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; 61} 62

エラーは以下のように出ました。(メールアドレスの部分だけは伏せておきました。)
2020-02-14 21:14:18 SERVER -> CLIENT: 220 smtp-proxy001.phy.lolipop.jp LOLIPOP-Fsecure
2020-02-14 21:14:18 CLIENT -> SERVER: EHLO xxx@xxxx.jp(メールアドレス)
2020-02-14 21:14:18 SERVER -> CLIENT: 250-smtp-proxy001.phy.lolipop.jp Hi smtp-proxy001.phy.lolipop.lan [172.19.44.42]250-8BITMIME250-AUTH PLAIN LOGIN250 SIZE 102400000
2020-02-14 21:14:18 CLIENT -> SERVER: AUTH LOGIN
2020-02-14 21:14:18 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2020-02-14 21:14:18 CLIENT -> SERVER: [credentials hidden]
2020-02-14 21:14:18 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2020-02-14 21:14:18 CLIENT -> SERVER: [credentials hidden]
2020-02-14 21:14:18 SERVER -> CLIENT: 535 Authentication failed for xxx@xxxx.jp(メールアドレス) - authsql/login - wrong password
2020-02-14 21:14:18 SMTP ERROR: Password command failed: 535 Authentication failed for xxx@xxxx.jp(メールアドレス) - authsql/login - wrong password
SMTP Error: Could not authenticate.
2020-02-14 21:14:18 CLIENT -> SERVER: QUIT
2020-02-14 21:14:18 SERVER -> CLIENT: 221 smtp-proxy001.phy.lolipop.jp closing connection. Have a wonderful day.
SMTP Error: Could not authenticate.
Message could not be sent. Mailer Error: SMTP Error: Could not authenticate.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scsi

2020/02/14 21:23

その通りにやったこと(コード)を詳細に書かないと誰も答えようがないと思います。
PonCotsu

2020/02/14 21:28

すみません、コードを書く前に投稿してしまいました。 たった今書きましたので、見て何が間違っているか言ってくれると嬉しいです。
guest

回答2

0

ベストアンサー

エラーメッセージにWrong Passwordと表示されているのでパスワードが間違っていると考えるのが自然かと思います。Lolipopの場合、メールのパスワードの初期値は自動設定されますが、正確に設定していますか?

イメージ説明

Lolipopの「メール設定」から上記の画面を表示して、「メールアカウント」と「メールパスワード」を確認してください。パスワードは初期状態ではマスクされていますが、錠前のアイコンをクリックすると表示されます。


追記します。まず、以下の部分はメールを送信するだけであれば不要です。以下がない場合、ウェブサーバー上のsendmailコマンド経由でメール送信されます。敢えて外部のメールサーバーを利用したいのみ以下を指定すればよいでしょう。そして、以下を省略すると、IDとパスワードも不要になります。

PHP

1 $mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output 2 $mail->isSMTP(); // Send using SMTP 3 $mail->Host = 'smtp.lolipop.jp'; // Set the SMTP server to send through(ロリポップSMTPサーバー) 4 $mail->SMTPAuth = true; // Enable SMTP authentication 5 $mail->Username = 'xxx@xxxx.jp'; // SMTP username(ロリポップのSMTPサーバーのメールアカウント) 6 $mail->Password = '********'; // SMTP password(メールアカウントのパスワード) 7 $mail->SMTPSecure = 'ssl'; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted(ssl接続) 8 $mail->Port = 465;

以下、コメント内の疑問への回答です。

PHP

1// require 'vendor/autoload.php'; //autoload.phpがどこにも見つからないのはなぜ...?ダウンロードしたコンテンツ内になかったのでコメント化しないとページがそもそも開けませんでした

おそらくcomposerコマンドを用いず、wget等でダウンロードしたからではないでしょうか?

PHP

1$mail->setFrom('xxx@xxxx.jp', 'Mailer'); //送信元のアドレスと送信者名(この場合、ロリポップのwebメールアドレス?)

これは、相手のメールソフト上での「差出人」をどう表示したいかを指定します。

PHP

1$mail->addAddress('xxxxx@gmail.com', 'Joe User'); // Add a recipient(送信先と受信者名。この場合、Gmailアドレス?)

ここは送信先のメールアドレスです。相手先のメールアドレスなので一般的にはgmailとは限りません。

PHP

1$mail->isHTML(true); // Set email format to HTML(ここはよくわからない。

HTMLメールを送りたいときはtrueですが、普通のテキストメールの場合はfalseにするか、この行自体を削除します。

PHP

1$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

HTMLメールでない場合、この行は不要です。


極限まで簡略化したソースを作りましたので試してみて下さい。メールアドレスは変更してください。

PHP

1<?php 2require_once 'PHPMailer/src/PHPMailer.php'; 3use PHPMailer\PHPMailer\PHPMailer; 4use PHPMailer\PHPMailer\Exception; 5 6$mail = new PHPMailer(); 7try { 8 $mail->AddAddress('atesaki@example.jp'); // 送信先のメールアドレスを指定 9 $mail->SetFrom('test@example.com'); // 送信元アドレスを指定 10 $mail->Subject = 'test subject'; 11 $mail->Body = 'test body'; 12 $mail->send(); 13} catch (Exception $e) { 14 echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}\n"; 15}

投稿2020/02/15 01:47

編集2020/02/16 00:54
ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PonCotsu

2020/02/15 21:13

丁寧なご説明ありがとうございます。 パスワードを変えたり、送信先のメールアドレスをかえたり、外部メールサーバー(この場合ロリポップ)を使用せずに(言われた部分をコメント化して)試してみましたが全部ダメでした。 メールサーバーの部分をコメント化した時はエラー表示が変化して以下のように出ました。 Message could not be sent. Mailer Error: Could not instantiate mail function. あとautoload.phpはインストール必要はないのでしょうか。
guest

0

認証エラーのようですが、アカウントとパスワードはあってますか?
メーラー等で同じアカウントとパスワードを使用してメール送信できますか?

投稿2020/02/14 22:03

scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PonCotsu

2020/02/14 22:12

返信ありがとうございます。 そのメール送信というのは単なるメール送信ですか、それともウェブページに組み込んだメール送信って意味ですか。
PonCotsu

2020/02/14 22:22

たった今普通のメール送信で試したところ、ログインすることも送信することもできました。
scsi

2020/02/14 23:57

普通のメール送信はスクリプトに入力した内容と同じアカウント、パスワード、smtpサーバを使用した送信であってますか?
PonCotsu

2020/02/15 00:50

はい、コピペで入力して試しましたし、実際に入力もして試しましたが、ダメでした。 このロリポップのメールアドレスは、ロリポップに最初からあるinfo@---.jpってものを使っているんですけど、それが問題なんですかね。 もう一つ新しいメールアドレスを登録して、それでやると違ったりしますか。
scsi

2020/02/15 01:26

アカウントとパスワードが間違っていないならエラーメッセージとは別の原因ですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問