ホームページ >バックエンド開発 >PHPチュートリアル >Linux環境でphpでメールを送信するようにsmtpを設定する方法

Linux環境でphpでメールを送信するようにsmtpを設定する方法

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-25 08:54:431707ブラウズ
  1. include_once("class.phpmailer.php");

  2. /**
  3. * 電子メールモジュール構成情報を定義します
  4. */
  5. define("SMTP_HOST","smtp.mail.yahoo.com) "); // SMTP ホスト
  6. define("SMTP_MAIL"," XXXX@yahoo.cn"); // SMTP ユーザーの電子メール
  7. define("SMTP_PASS"," XXXX"); // SMTP のパスワード> ;
  8. define("SERVICE_MAIL"," XXXX@yahoo.cn"); // SMTP ユーザーのメールアドレス

  9. define("SERVICE_NAME","PHPBOOK Email Test") // 使用される SMTP 名> ;
  10. /**
  11. * phpmailer を使用してメールモジュールを送信します
  12. *
  13. * @param string $email
  14. * @param string $user
  15. * @param string $subject
  16. * @param string $body
  17. * @return bool
  18. */
  19. function sendMail($email,$user,$subject,$body)
  20. {
  21. $mail = new PHPMailer();
  22. //$this;
  23. $mail ->IsSMTP (); // SMTP を設定します
  24. $mail->Host = SMTP_HOST; // SMTP サーバーのアドレスを設定します
  25. $mail->SMTPAuth = true; // SMTP 権限の検証をオンにします
  26. $mail-> ; // SMTP ユーザー名
  27. $mail->Password = SMTP_PASS; // SMTP サーバーのパスワード
  28. $mail->From = SERVICE_MAIL; // 送信者のアドレスを設定します= SERVICE_NAME // 送信者の名前を設定します

  29. $mail->AddAddress($email, $user) // 受信者のアドレスを追加します
  30. $mail->AddReplyTo(SERVICE_MAIL, SERVICE_NAME); // 返信アドレスを設定しますp>
  31. $mail->WordWrap = 50; // 表示形式を設定します

  32. $mail->IsHTML(true); // HTML をサポートするようにメールを設定します
  33. $mail->Subject = $subject;
  34. $mail->Body = $body;
  35. $mail->AltBody = ""; // テキスト型 mail
  36. if(!$mail- >Send()) {

  37. return $mail->ErrorInfo;
  38. }
  39. return true;
  40. }
  41. //テストメールの送信開始: fsockopen() [function.fsockopen ]: php_network_getaddresses: getaddrinfo failed: Name or /var/www/xiehui/admin/mail/class.smtp.php の 89 行目でサービスが不明です

  42. $tomail = " XXXX@126.com";
  43. $user = " XXXXlinux ";
  44. $_mailSubject = "メール テストexample!"; // ユーザーに送信されるメール件名グループ
  45. $_mailBody = "Sina"; // メールコンテンツチーム
  46. sendMail($tomail,$user ,$_mailSubject,$_mailBody);
  47. ?>
コードをコピー

Yahoo の SMTP は非常に使いやすいことが実験で証明されましたが、いわゆる Sina の SMTP は実際には使いにくいです。

メソッド4、ソケットによって書かれたプログラムに与えられます ソケットを使用して電子メールを送信するためのカプセル化クラス:

  1. class sendmail{
  2. var $lastmessage; // 返された最後の応答メッセージを記録します
  3. var $lastact; // HELO で使用されます。ユーザー歓迎
  4. var $debug; //デバッグ情報を表示するかどうか
  5. var $smtp; //smtp サーバー
  6. var $port; // ソケットハンドル
  7. // メール送信関数
  8. function send_mail($smtp, $welcome="", $debug=false) {
  9. if(empty($smtp)) die("SMTP を空にすることはできません!");
  10. $this->smtp=$smtp;
  11. if(empty($welcome)) {
  12. $this->welcome=gethostbyaddr("localhost");
  13. }else
  14. $this->welcome= $welcome;
  15. $this->debug=$debug;
  16. $this->lastmessage="";
  17. $this->lastact="";
  18. $this->port="25";
  19. }
  20. //表示调试情報
  21. function show_debug($message, $inout) {
  22. if ($this->debug) {
  23. if($inout=="in"){ //响应情報
  24. $m='< ; }else
  25. $m='>> ';
  26. if(!ereg("n$", $message))
  27. $message .= "
    ";
  28. $message= nl2br($message);
  29. echo "${m}${message}";
  30. }
  31. }
  32. //実行传递的コマンド
  33. function do_command($command, $code) {
  34. $this->lastact=$command;
  35. $this->show_debug($this->lastact, "out");
  36. fputs ( $this->fp, $this->gt; lastact );
  37. $this->lastmessage = fgets ( $this->fp, 512 );
  38. $this->show_debug($this->lastmessage, "in");
  39. if(!ereg(" ^$code", $this->lastmessage))
  40. return false;
  41. else
  42. return true;
  43. }
  44. //邮件送信处理
  45. function send( $to,$from,$subject,$message) {
  46. / /接続サービス
  47. $this->lastact="connect";
  48. $this->show_debug("SMTP サーバーへの接続: ".$this->smtp, "out");
  49. $this->fp = fsockopen ( $this->smtp, $this->port );
  50. if ( $this->fp ) {
  51. $this->set_socket_blocking( $this->fp, true );
  52. $this ->lastmessage=fgets($this->fp,512);
  53. $this->show_debug($this->lastmessage, "in");
  54. if (! ereg ( "^220", $this->lastmessage ) ) {
  55. return false;
  56. }else{
  57. $this->lastact="HELO " . $this->ようこそ。 "n";
  58. if(!$this->do_command($this->lastact, "250")){
  59. fclose($this->fp);
  60. return false;
  61. }
  62. $this-> ;lastact="メール送信元: $from" 。 "n";
  63. if(!$this->do_command($this->lastact, "250")){
  64. fclose($this->fp);
  65. return false;
  66. }
  67. $this-> ;lastact="RCPT TO: $to" 。 "n";
  68. if(!$this->do_command($this->lastact, "250")){
  69. fclose($this->fp);
  70. return false;
  71. }
  72. //开始送信邮件正文
  73. $this->lastact="DATAn";
  74. if(!$this->do_command($this->lastact, "354")){
  75. fclose($this->fp);
  76. return false;
  77. }
  78. //开始処理邮件主题头
  79. $head="Subject: $subjectn";
  80. if(!empty($subject) && !ereg($head, $message)){
  81. $message = $ head.$message;
  82. }
  83. //处処理邮件From头
  84. $head="From: $fromn";
  85. if(!empty($from) && !ereg($head, $message)) {
  86. $message = $head.$message;
  87. }
  88. //開始処理邮件To头
  89. $head="To: $ton";
  90. if(!empty($to) && !ereg($head, $message)) {
  91. $message = $head.$message;
  92. }
  93. //处理结束串
  94. if(!ereg("n.n", $message))
  95. $message .= "n.n";
  96. $this->show_debug($message , "out");
  97. fputs($this->fp, $message);
  98. $this->lastact="QUITn";
  99. if(!$this->do_command($this->lastact, "250")){
  100. fclose($this->fp);
  101. return false;
  102. }
  103. }
  104. return true;
  105. }else{
  106. $this->show_debug("连接失败!!", "in ");
  107. return false;
  108. }
  109. }
  110. }
  111. ?>
复制代

ソケットを使用したメール送信の例:

  1. include ("./sendmail.class.php");
  2. $mail = new sendmail();
  3. $email = "こんにちは、これはテストメールです!";
  4. $ sendmail = new send_mail("smtp.mail.126.com","PHPBOOK",true); //調整情報を表示
  5. if($mail->send("XXXX@126.com", "XXXX@ 126) .com"、"SOCKET メールのテスト"、$email)) {
  6. echo "送信に成功しました!
    ";
  7. }else{
  8. echo "送信に失敗しました!
    ";
  9. }
  10. ?>
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。