プロが教える店舗&オフィスのセキュリティ対策術

会員データーの会員に一斉メール配信をしたいのですが上手くいきません。
DBはkaiin,maildbの二つ
環境はエクリプス(PHP5.3)とXAMPP
ソースコードは以下の通りです。
<?php
//データーベース接続
$dbh = new PDO("sqlite:user",null,null);
//
mb_language("japanese");
mb_internal_encoding("UTF8");
if (isset($_POST["submit"])){
//変数のセット
$title = htmlspecialchars($_POST['title'],ENT_QUOTES);
$text = htmlspecialchars($_POST['text'],ENT_QUOTES);
$date = date('Y/m/d H:i:s');
if (strlen($title)==0){
$error = "タイトルが未入力です。";
}
if (strlen($text)==0){
$error = "本文が未入力です。";
}
//メール文をデーターベースに残す
if ($error==""){
$sql = "INSERT INTO maildb ( title,text,date ) VALUES ( '$title','$text','$date' )";
$sth = $dbh->prepare($sql);
$sth->execute();
//送信先アドレス抽出
$sql = "SELECT name,email FROM kaiin";
$sth = $dbh->prepare($sql);
$sth->execute();
while ($row = $sth->fetch()) {
$to = $row['email'];
$subject = $_POST['title'];
$body = $row['name']." さま\n\n";
$body .= $_POST['text']."\n\n";
$body .= "本メール会員を退会する場合は以下のURLより手続きをお願いします。\n";
$body .= "http://localhost/php/#\n";
$from = "From:abcd@efgh.jp";
if(mb_send_mail($to,$subject,$body,$from)){   ここが40列目です。
echo "メール送信成功しました。";
}else{
echo "メール送信失敗しました。";
}
}
}
}
?>
エラーコード
Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\Narita\kanri\email.php on line 40
翻訳
(警告:mb_send_メール()[function.mb-送信メール]:「localhost」ポート25でmailserverと接続するために失敗し、php.iniにおいて設定するあなたの「SMTP」および「smtp_port」を確認するか、またはライン40においてC:\xampp\htdocs\Narita\kanri\email.phpのini_セット()を使いなさい)

php.iniの変更が必要なのでしょうか?
または他に何か原因があるのでしょうか?

A 回答 (5件)

一例として下記が参考になると思います。


http://techacademy.jp/magazine/4129
http://piyopiyocs.blog115.fc2.com/blog-entry-623 …
    • good
    • 0

ISPのポート587経由で送りたいということですよね?


ポート587はサブミッションポートといって25の代替ポートして
ほとんどの場合認証が必要となります。
ここ10年ほどで出所を隠したスパムが送れないようにISPが対策をしたということです。

http://www.ii-okinawa.ad.jp/support/mail/port587 …

以前の質問で以下あるよう
https://oshiete.goo.ne.jp/qa/8025090.html

mb_send_mail()ないしmail()は単純に認証なしでメールを送る機能なので
認証付きメール送信はなんらかのライブラリを介するのが妥当です。
よくつかわれるのはPEAR::Mail。
PEAR::Mailは複数メールを送るときなどにも
mail()関数でループ処理をするより効率がよいようです。

http://pear.php.net/package/Mail

一応、みる限りXAMMPには補完機能としてsendmail.iniが用意されているので
調整ができるかもしれません
C:\xampp\sendmail\sendmail.ini
また、php.iniのSMTPやsmtp_portも合わせて変更する必要がありそうです。
ただし私はUNIX環境でしかphpを使用しないのでWin版については検証していません、あしからず

http://php.codeindepth.com/php-sending-mail/
    • good
    • 0

>php.iniでポートを587にしてみましたがダメでした。



メールサーバ動作しているんですか?
「C:\xampp」ってくらいですからWindows なんでしょうけど、メールサーバ構築した記憶はおありですかね?
SMTP接続でISPのメールサーバとか指定するもの…かと。
# ローカルネットワーク内にSMTPサーバが構築されているならそちらに。
# ISPのSMTPサーバを…という場合には認証とか587ポートへの変更とかは必要になる可能性は高いでしょうが。

sendmail_fromとかはちょっと調べていないので不明ですが。
# php詳しい人待ち?
    • good
    • 0

XAMPPってことはWindows環境ですよね?


mb_send_mail関数って内部的にsendmail使用してませんでしっけ?
SMTPで送信するようにすればいいと思います。
    • good
    • 0
この回答へのお礼

begin96さん、php.ini内のSMTPに自身のアカウントのSMTPアドレスを記入すると言うことでしょうか?

お礼日時:2015/11/10 10:46

phpは専門外ですが…。



>Failed to connect to mailserver at "localhost" port 25

メール送信のためにメールサーバーへの接続に失敗した。
と言ってます。

>verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()

php.iniかini_set()で設定してくれ。
と言ってます。
で、検索すると
http://www.phpbook.jp/tutorial/mailini/index1.html
こんなページが出てきます。
    • good
    • 0
この回答へのお礼

Wr5さん、php.iniでポートを587にしてみましたがダメでした。
あとsendmail_from =で自身のメールアドレスを入れてみましたがやはり送信できませんでした。

お礼日時:2015/11/10 10:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!