ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2009年1月16日金曜日

PHPでメールを送信するための設定方法とメモ

mb_send_mail()関数を使ったメールの送信にチャレンジだい!と設定をいじるも、案の定試行錯誤、かつ解決できているのかわからないので次回以降のためにメモします。

設定とは言っても、"php.ini"の700行目あたりにあるこの部分を…
[mail function]
;For Win32 only.
SMTP = localhost
smtp_port = 25

;For Win32 only.
;sendmail_from = me@example.com

以下のように修正するだけです。
[mail function]
;For Win32 only.
SMTP = 使用するSMTPサーバのホスト名
smtp_port = 25

;For Win32 only.
sendmail_from = 送信元(自分)のメールアドレス

あとは、apacheの再起動をすれば完了のはずです。わくわくしながら試してみると、…そう、いつもの如くうまくいきません。画面には以下のようなエラー。
Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP"…(以下省略).

「"localhost"というメールサーバーの接続に失敗しましたけど?」と高圧的にきたわけです。このエラーを見て思うのは、修正したはずのSMTPサーバー名が何故か"localhost"のままになっているということ。ここでphp.iniは複数存在することを思い出し、xampp/apache/bin/フォルダの中の"php.ini"を修正したところ解決。


これで終了かなと処理を実行すると、…待ってました!次はこんなエラーの登場です。
Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 550 Relaying denied. (LOLIPOP-Fsecure) …(以下略)

今回SMTPサーバにロリポップのメールサーバーを指定しているのですが、どうやらここで問題が起きている様子。調べてみると「POP before SMTPの認証を行っていない」点が原因のようです。…わからん。メールの受信(送受信)を1度した上で、その後数分以内に送信すれば良い、みたいなことかと思い試すも、結局同じエラー。

その後試行錯誤を繰り返すも解決できず、最後に1度ファイルをweb上にアップしてみることに。…するとメール送信できました。。どうやらweb上にアップすればうまく処理してくれるようです。ですが、これで良いのでしょうか…。個人的にはローカル内からメール送信したいのですが。


ひとまずメールは送れたのでここまでにしておきますが、多分ローカル内からでも送信できますよね?じゃないと1回1回アップして動作確認なんか面倒だし。偶然拝見した"QUALL"さんもローカルから送信してるみたいだし。これはまたその内確認したいと思います。

最後になりましたが、コードは以下。
<?php
//*********************************************************
//
// メール送信チェック
//
//*********************************************************

$mailto = "○○@○○.jp";
$subject = "送信テスト";
$content = "やったね送れたね。";
$mailfrom = "From:××@××.com";

mb_language("ja");
mb_internal_encoding("UTF-8");

if(mb_send_mail($mailto,$subject,$content,$mailfrom)){
echo "送信しました";
}else{
echo "送信できませんでした";
}

?>

《関連記事》

2008年12月9日火曜日

文字コード変更などMySQLの設定についてのメモ

PHPの勉強を始めた流れで、MySQLをコマンドプロンプトとやらで初めて操作してみました。以下は、その際に設定した箇所のメモになります(OSはWindowsです)。今回は以下3点の設定をしました。
  • 環境変数"Path"の設定
  • rootユーザーのパスワード設定
  • 文字コードの設定(my.cnfの設定)

・ 環境変数"Path"の設定
MySQLにアクセスするには"mysql.exe"のあるフォルダまでのパスをコマンドプロンプト内で記述しなければいけないのですが、毎回これでは面倒なので、どこからでもMySQLへアクセスできるように設定をします。
  1. マイコンピュータで右クリック、プロパティをクリック
  2. 詳細設定タブの環境変数をクリック
  3. システム環境変数内のPathを選択、編集をクリック
  4. 既に指定されているパスの終わりに「;」を加え、その後に"mysql.exe"ファイルのあるフォルダまでのパスを加えます。僕の場合は下のパスになります。
    D:\xampp\mysql\bin
  5. windowsを再起動して完了
    *Pathが無い場合は変数名を"Path"として新規で作成、変数値に"mysql.exe"ファイルのあるフォルダまでのパスを加えればOK。

・ rootユーザーのパスワード設定
MySQLの使用権限を持つスーパーユーザー"root"のパスワードが未設定では危険とのことで設定します。
  1. コマンドプロンプトを開き、「mysqladmin -u root password ここに設定したいパスワードを入力」と打ちます。(ただし、上の環境変数Pathの設定をしていない場合は、"mysqladmin.exe"ファイルのあるフォルダまでのパスを指定してください。)
  2. 「mysqladmin -u root -p」でEnter、パスワードを求められるので、設定したものを打ち込んでログインできればOK。

・ 文字コードの設定(my.cnfの設定)
XAMPPでMySQLをインストールした場合に限るのか何なのかわかりませんが、MySQLの文字コード設定が"latin-1"というものになっておりました。utf-8で制作する僕にとっては文字化けの原因になるのでこの設定を変更します。
  1. 「my.cnf」ファイルをテキストエディタで開きます。場所は僕の場合は、
    D:\xampp\mysql\bin
    です。何もいじって無ければbinフォルダ内にあると思います。(*WindowsXPの方は、my.cnfの拡張子が表示されず、my 短縮ダイアルと表示されています。)
  2. [client]と[mysqld]の設定に、上記の記述を加える。
    [client]
    default-character-set=utf8

    [mysqld]
    default-character-set = utf8
    skip-character-set-client-handshake
    character-set-server = utf8
    collation-server = utf8_general_ci
    init-connect = SET NAMES utf8
  3. MySQLを再起動し、コマンドパネルからログイン。
  4. statusから、以下のように確認できればOK。
    Server characterset:    utf8
    Db characterset: utf8
    Client characterset: utf8
    Conn. characterset: utf8

以上です。僕としてはコマンドプロンプトという得体の知れないものをパチパチ打ってるだけで前進してる錯覚を覚え、少し楽しかったです(笑)

(参考サイト様)
・"All About「XAMPPインストール後のMySQLの設定」"
・"渋谷生活「MySQL 文字化けを防ぐ、文字コードの確認と設定」"

《関連記事》

2008年11月18日火曜日

XAMPPのインストールについてメモ

PHPの勉強を始めるため、その環境作りに"XAMPP"をインストールすることにしました。その際つまづいた箇所があったので、今後のためにメモしておきます。

まずインストールの手順ですが、詳しく説明されている"ThinkIT"さんなどを見ながら進めました。今回インストールするバージョンは、XAMPP1.6.8(ちなみに僕のPCはWindow XP HOME EDITION SP2)です。インストール自体は簡単に終わりましたが、http://localhost/へのアクセスが出来ない問題が発生しました。

apacheが起動していないのかと思いましたが、80番のポートはapacheに使用中(xampp-portcheck.exeで確認)で問題無さそうです。プロキシの設定をすることで問題も出るらしいのですが、そこも原因ではありませんでした。あとは、hostsファイル(僕の場合、C:\WINDOWS\system32\drivers\etc\hosts)にlocalhostの記述がされてない可能性もあるとのことでしたが、それも問題ありませんでした。さらに調べていると、http://localhost/と同様にhttp://127.0.0.1/と入力してもアクセスできるとわかり、試してみるとこれは繋がりました。ということは、apacheの問題では無いことが確かになりました。

では何が…と検索を続けていると、どうもセキュリティソフトのファイヤーウォールあたりが臭う…ということで、設定を無効にしてlocalhostへアクセス。……ダメでした、苦しめてくれますね。さらに調べると、どうもインストールすることで、apacheが使えなくなる仕様のセキュリティソフトがあるということがわかりました。僕の使うセキュリティソフトは、インストールするだけでapacheが使えなくなるかどうかわからないのですが、ただ、同じ症状で困っている方のブログがあり、そこに、原因はセキュリティソフトの"アプリケーションプロトコルフィルタリング"設定であるとありました。そこでこの設定を切って、アクセスしてみると……出来た!!http://localhost/でアクセスできました。素晴らしい。

あとはhttpd.confなどの設定ですが、これは何も問題ありませんでした。
というわけで、今後、同様の環境設定をしなければならなくなった時の為の自分用メモでした。

以下、参考にさせていただいたサイト様(敬称略)
Think IT :設定の手順
面白法人KAYAC-静岡支社Blog- :設定の手順
犬小屋にて :アクセスできない原因