• 締切済み

PHPプログラムからプロバイダーのメールサーバを使用

プロバイダーに入会するとメールアカウントがもらえますが、そのメールアカウントを使って、PHPモジュールよりメールを送信したいと考えております。 プロバイダーのメールサーバを使用する際、 認証用のアカウント、パスワードが必要ですが、 PHPモジュールに実装するロジック、関数など 存在しますでしょうか? 要は、PHPモジュールからプロバイダのメールサーバ経由でメールを送信したい、ということです。 またphp.iniの設定も必要になってくるのでしょうか? よろしくお願いいたします。

  • fm0606
  • お礼率13% (100/761)
  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • Nii
  • ベストアンサー率48% (79/162)
回答No.1

サーバーの環境が違うのと、不要な部分と一緒に必要な箇所をそぎ落としてしまった可能性もあり、参考になるかどうかもわかりませんが、私はこんな感じで送信出来ました。 htmlとPHPの日本語コードが違うと送信したメールが文字化けしたので、注意して下さい。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <script language="JavaScript" type="text/JavaScript"> <!-- /* メールチェック */ function MailCheck() { var str = document.msg.mail.value; if(! str.match(/^[-\.\w]+\@[-\.\w]+\.[-\.\w]+$/) ) { alert("メールアドレスが正しく入力されていません。"); return 1; } return 0; } /* 入力クリア確認 */ function init() { if (confirm("入力された内容を全てクリアしてもよろしいですか?")) document.con.reset(); else return false; } //--> </script> </head> <body> <form name="con" action="send.php" method="POST"> Mail<input name="mail" onblur="MailCheck();"> 内容<textarea name="msg" rows="5" cols="50"> <input type="submit" value="確認" onclick="return MailCheck();"> <input type="reset" value="リセット" onclick="return init();"> </form> </body> </html> <?php //送信先メールアドレス $to = "XXX@XXXXX.XXX"; //データファイル $LogFile = "data.cgi"; //再送信制限時間 $limittime = 30; $mail = trim($_POST['mail']); $msg = trim($_POST['msg']); //同一クライアントからの連続送信チェック $time = time(); $addr = $_SERVER['REMOTE_ADDR']; $fp = fopen($LogFile,'r'); while(!feof($fp)){ $line = fgets($fp); $items = explode("\t", $line); if($time - $items[0] < $limittime) $data[$items[1]] = $line; } fclose($fp); $err = ""; //メール形式のみ一応チェック if (ereg('^[a-zA-Z0-9_\.\-]+@[A-Za-z0-9_\-]+\.[A-Za-z0-9_\.\-]+$', $mail)) { } else { $err = "メールアドレスが正しく入力されていません。\n"; } if ($data[$addr] == "" and $err == "") { $headers = "From: " . $to . "\r\n" . "Reply-To: " . $to . "\r\n" . "Return-Path: " . $to . "\r\n" . "X-Mailer: PHP/" . phpversion() . "MIME-Version: 1.0\r\n" . "Content-type: text/plain; charset=ISO-2022-JP\r\n" . "Content-Transfer-Encoding: 7bit"; //メール作成 $subject = mk_subject("subject"); $message = mk_message($msg); mb_send_mail($mail, $subject, $message, $headers); } //アクセス履歴格納 $line = "$time\t$addr\t\n"; $data[$addr] = $line; $fp = fopen($LogFile, 'w'); foreach($data as $line) fputs($fp, $line); fclose($fp); function mk_subject($subject){ $subject = mb_convert_encoding($subject,"JIS","EUC-JP"); $subject = base64_encode($subject); $subject = "=?iso-2022-jp?B?" . $subject . "?="; return $subject; } function mk_message($message){ // 1 行が 70 文字を超える場合は行を分割 $message = wordwrap($message, 70); $message = mb_convert_encoding($message,"JIS","EUC-JP"); return $message; } ?> なので、認証用のアカウント、及び、パスワードは、私の環境では必要ありませんでした。

fm0606
質問者

補足

詳細な回答ありがとうございます。 携帯端末にも届きますでしょうか?

関連するQ&A

  • PHPプログラムからプロバイダーのメールサーバを使用 II

    プロバイダーに入会するとメールアカウントがもらえますが、そのメールアカウントを使って、PHPモジュールよりメールを送信したいと考えております。 プロバイダーのメールサーバを使用する際、 認証用のアカウント、パスワードが必要ですが、 PHPモジュールに実装するロジック、関数など 存在しますでしょうか? 要は、PHPモジュールからプロバイダのメールサーバ経由でメールを送信(携帯端末、PC端末)したい、ということです。 現在「op25b」というプロバイダでメールフィルタ機能が備わり携帯に送信できないような仕様なってしまいました。 https://ybb.softbank.jp/support/op25b/ またphp.iniの設定も必要になってくるのでしょうか? よろしくお願いいたします。

    • 締切済み
    • PHP
  • php.iniって。。

    超初心者です。 phpでメール送信をしようと本を片手に奮闘しておりますが、基本的なことがよくわかりません。 プロバイダはぷららで、ロリポップでレンタルしているサーバー上のサイトからぷららのアドレスに送信したいです。 php.iniでSMTPの設定を、など書いてあるのですが、php.iniとは、サーバー上にUPするものなのでしょうか? ロリポップのphpは4.3.11だと書いてあるのですが、そのphp4.3.11と、php.iniとは違うものなのでしょうか?  そしてメールサーバーは、ぷらら、ロリポップ、どちらのを設定すればよいのでしょうか? 基本的すぎて本にも書いてありません。 すみませんが、どなたか教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • メールサーバー認証?

    php(send_mail)からのメールをsmtpサーバーが拒否する。サーバーに認証させる必要がある。この時に認証させる必要があるサーバーは、プロバイダからもらったsmtp.hb.tp.jpですか?それともsend_mailですか?phpのメールフォームからメールを送りたいだけなんです。

  • プロバイダ選び(メールセキュリティ)について?

    メールソフトを移行して気になったのですが、 今契約しているプロバイダのメールアカウントの 受信サーバーが 接続の保護なし、認証方式平文パスワード(安全でない) と設定され、 送信サーバーは 認証方式が暗号化されたパスワ-ド認証、接続の保護がSTARTTLS となってます。 ちなみに移行したThunderbirdに設定すると受信サーバーの 接続の保護なしに関して警告表示がでて、 一応それに同意して設定を済ませました。 ですが受信、送信サーバー共に接続の保護、認証方式選択には いくつかあるのでプロバイダによってはもっとしっかりした メールアカウントを提供してくれるのか?と思ったのですが 実際のところどうなのでしょうか?

  • PHPでメールの送信ができない

    xampp1.8.0環境から PHPのmb_send_mailでメールの送信をしようとしています。 php.ini SMTP = smtp.xxx.ne.jp (プロバイダから指定されてるもの) smtp_port = 25 xampp1.7.7くらいの環境のときは↑の設定のみで送信できたのですが 新しいバージョンに変えてから送れなくなりました。 古いバージョンのphp.iniと差し替えると送信可能になります。 上記の2行以外でメールの設定に関わる部分はありますでしょうか?

    • 締切済み
    • PHP
  • 新サーバーのメールが送れません

    会社で独自ドメインを取っているのですが、近々レンタルサーバー業者の移管をする手続きをやっています(プロバイダについては別会社と契約しています)。 今問題となっているのが、移管先のメールサーバーからメールの送信が出来なくなっている点です。 受信は新旧サーバーで全て出来ています。 なお、ドメインは仮に「xxxx.jp」とします。 【移管元(旧サーバー)の送信サーバー情報】 受信・送信サーバー mail.xxxx.jp 送信時の認証 要 送信ポート 587 【移管先(新サーバー)の送信サーバー情報】 受信・送信サーバー xxxx.jp 送信時の認証 要 送信ポート 25 ※ 近々ネームサーバーを変更する予定ですので現在のネームサーバーは移管元(旧サーバー)にあります。 Outlook2007・Thunderbird・スマホ等携帯機器で移管先(新サーバー)でのメール設定を行っているのですが、移管先(新サーバー)経由で送信テストを行った時、移管元(旧サーバー)経由で送信されていることが分かりました(パスワードを新旧違ったものにした時、旧サーバーのパスワードしか通過しなかったため)。 旧サーバー会社に聞くと、送信サーバーは「mail.xxxx.jp」はもちろん、「xxxx.jp」でも通過するかもしれないとのことでした。 そこで、移管先(新サーバー会社)に解決方法を確認した所、移管先(新サーバー会社)のIPアドレス(仮に123.45.67.89)を入力し、入力したらどうかと言われたのですが、ポート番号エラーとなって送信できず。 「Outlook2007」では数分待った後、「送信(SMTP)メールサーバーに接続できません。このメッセージを受信する場合は、サーバー管理者か、インターネットプロバイダに問い合わせてください。」というエラーメッセージが出ます。 再度移管先(新サーバー会社)に確認した所、送信時に、プロバイダが何らかのセキュリティをかけているかもという事を言われ、送信ポートを25から587にすればどうかと言われました。 この内容で送信設定をした時、Thunderbirdのみ解決しました(接続の保護は「STARTTLS」と出ます)。 しかし、「Outlook2007」では解決すらしません(送信状態のままフリーズするか、「このクライアントでサポートされている認証方法がサーバーでサポートされていません。」というエラーメッセージが出ます。)。 またAndroidスマートフォンを持っている社員もいるのですが、接続方法を「STARTTLS」として試してみたのですが、「サーバーが接続を拒否しました。ルート証明書が無効です。」というメッセージが出て初期設定が出来ません<添付参照>(受信設定は問題なく通過しました)。 プロバイダの問題かもと思って、自宅でテスト的にやったのですが、結果は同じでした。 お聞きしたいのは2点です。 ・ 送信サーバーの「xxxx.jp」は、現在、移管元(旧サーバー)経由になっているということは、移管元の情報が切れたら、自動的に移管先(新サーバー)経由に移行されるのでしょうか。 ・ Thunderbirdだけが出来て、それ以外は接続拒否されている原因は何かあるのでしょうか。プロバイダとの関係も何かあるのでしょうか。現在も解決方法が分からず困っていますので何か解決手段はありませんでしょうか。 送信できないとなると、結構大事なので、お力をお貸し下さい。よろしくお願いします。

  • 契約しているプロバイダのSMTPサーバーを勝手に使用していいのですか

     自分は、WINの98を使っています。  無料メールアカウントが取れるホームページは、メールを送信する  システムがありません  なので、そのホームページは、      "契約しているプロバイダのSMTPサーバーを使用してください"                            と、言っています。                 そこで、契約しているプロバイダのSMTPサーバーをメールを送信するために   勝手に使用していいのですか

  • Linuxサーバから社内SMTPサーバを経由してメールを送信したい

    いつもお世話になっております。 Linuxサーバよりメールを送信したいのですが、同じ社内に設置している別のSMTPサーバを使って送信したいと考えています。 Windowsサーバであれば"php.ini"の"SMTP"に利用したいSMTPサーバを指定してやればよいかと思いますが、Linuxの場合はどうすれば良いでしょうか? 実際にやりたいこととしては、Linuxサーバより公開しているフォームメールのページにアクセスして情報を送信した際に、社内のSMTPサーバを経由してメールが管理者に送信されるというものです。 その他、必要な情報等ありましたら、お申し付けください。 以上、宜しくお願い致します。

  • メールサーバ宛のメールが遅延します

    sendmailでメールサーバを立上げましたが、プロバイダーのメールアカウント宛のメールは瞬時に受信できるのに対して、プロバイダーのメールアカウントからメールサーバのアカウント宛のメールは受信に30分程度時間が掛かります。同一ネットワークのPCから同じように送信しているにも関わらず、プロバイダーのアカウントからメールサーバのアカウント宛のメール受信に時間が掛かるのはどういう事由からなのでしょうか。ちなみに独自ドメインを固定IPアドレスで運用していますが、DNSはプロバイダーのそれを利用しています。

  • Postfixで、プロバイダのSMTPサーバを使用し、メールを送信する方法

    Postfixにおいて、プロバイダのSMTPサーバを経由して メールを送信する方法についてお伺いします。 環境は以下の通りです。 プロバイダ = OCN Postfixのバージョン = 2.5.1 OS = FreeBSD 7.0-RELEASE プロバイダ指定のSMTPサーバ = xxx.ocn.ne.jp 下記の方法を用いると、myname@gamil.com宛に 正しくメールが届きます。 $ telnet xxx.ocn.ne.jp 25 Connected to xxx.ocn.ne.jp. Escape character is '^]'. 220 smtp.xxx.ocn.ne.jp ESMTP Postfix mail from:<myname@xxx.ocn.ne.jp> 250 Ok rcpt to:<myname@gmail.com> 250 Ok data 354 End data with <CR><LF>.<CR><LF> message body . 250 Ok: queued as 08CF127B2 quit 221 Bye Connection closed by foreign host. 以上の様な方法で、プロバイダのSMTPサーバを経由し、 かつ、プロバイダから割り当てられたアカウントを使用して、 Postfixにメール送信を行わせるのには どのような設定が必要でしょうか。 コマンドラインから $ echo "message body" | mail -s "test mail" myname@gmail.com 上記の様に入力した場合、Postfixデフォルトの設定でもGMailなど、 一部アドレスにはメール送信が可能なのですが、 他のアドレスでは、 Sender address rejected: Domain not found とログに出力され、送信が失敗してしまいます。 ドメイン名がDNS逆引きできる名前ではない(localdomain)ために、 宛先のサーバ側のチェックが厳しいと送信が失敗してしまうのだと思います。 この場合も上記のtelnetの方法を用いて、 明示的に送信者を指定すると、正しく送信が可能です。 Postfixがxxx.ocn.ne.jpに接続し、 myname@xxx.ocn.ne.jp を名乗って送信を 行えば良いのかと思いますが…

専門家に質問してみよう