>  기사  >  백엔드 개발  >  Linux에서 PHP로 이메일을 보내도록 smtp를 구성하는 방법

Linux에서 PHP로 이메일을 보내도록 smtp를 구성하는 방법

WBOY
WBOY원래의
2016-07-25 08:54:431612검색
  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 이메일 테스트"); // 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. 함수에 사용되는 이름 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->Username = SMTP_MAIL; username
  27. $mail->Password = SMTP_PASS; // SMTP 서버 비밀번호

  28. $mail->From = SERVICE_MAIL; // 보내는 사람 주소 설정

  29. $mail-> ;FromName = SERVICE_NAME; // 보내는 사람 이름 설정
  30. $mail->AddAddress($email, $user); // 받는 사람 주소 추가
  31. $mail->AddReplyTo(SERVICE_MAIL, SERVICE_NAME); / 답장 주소 설정

  32. $mail->WordWrap = 50; // 표시 형식 설정

  33. $mail->IsHTML(true) // 이메일 지원 html
  34. $mail->Subject = $subject;
  35. $mail->Body = $body;
  36. $mail->AltBody = ""; // 텍스트 유형 이메일< ;p> if(!$mail->Send())
  37. {
  38. return $mail->ErrorInfo;
  39. }
  40. return true;
  41. }

  42. //테스트 이메일 보내기 시작: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo 실패: /var/www/xiehui/admin/mail/class.smtp.php에 이름 또는 서비스가 알려져 있지 않습니다. line 89

  43. $tomail = " XXXX@126.com";
  44. $user = " XXXXlinux";
  45. $_mailSubject = "메일 테스트 예시!" // 사용자에게 이메일 제목 그룹 보내기
  46. $_mailBody = "Sina"; // 이메일 콘텐츠 그룹
  47. sendMail($tomail,$user, $_mailSubject,$_mailBody);
  48. ? >

코드 복사

실험을 통해 Yahoo의 SMTP는 사용하기 매우 쉬운 것으로 입증되었지만 소위 Sina는 실제로 사용하기 쉽지 않았습니다.

방법 4, 소켓으로 작성된 프로그램 제공 소켓을 사용하여 이메일을 보내기 위한 캡슐화 클래스:

  1. class sendmail{
  2. var $lastmessage; //반환된 마지막 응답 메시지 기록
  3. var $lastact; 액션, 문자열 형식
  4. var $welcome; // HELO 이후에 사용자를 환영하는 데 사용됩니다.
  5. var $debug; // 디버깅 정보 표시 여부
  6. var $smtp; // smtp 서버 ; //smtp 포트 번호
  7. var $fp; //소켓 핸들
  8. //메일 보내기 기능
  9. function send_mail($smtp, $welcome="", $debug=false) {
  10. if (empty($smtp)) die("SMTP는 비워둘 수 없습니다!");
  11. $this->smtp=$smtp;
  12. if(empty($welcome)) {
  13. $this->welcome=gethostbyaddr("localhost");
  14. }else
  15. $this->welcome=$welcome;
  16. $this->debug=$debug;
  17. $this->lastmessage="";
  18. $this->lastact=" ";
  19. $this->port="25";
  20. }
  21. //显示调试信息
  22. function show_debug($message, $inout) {
  23. if ($this-> ;디버그) {
  24. if($inout=="in"){ //响应信息
  25. $m='<< ';
  26. }else
  27. $m='>> ; ';
  28. if(!ereg("n$", $message))
  29. $message .= "
    ";
  30. $message=nl2br($message);
  31. echo "${m}${message}";
  32. }
  33. }
  34. //执行传递的命令
  35. 함수 do_command($command, $code) {
  36. $this->lastact=$command;
  37. $this->show_debug($this->lastact, "out");
  38. fputs( $this->fp , $this->lastact );
  39. $this->lastmessage = fgets ( $this->fp, 512 );
  40. $this->show_debug($this->lastmessage, "in ");
  41. if(!ereg("^$code", $this->lastmessage))
  42. return false;
  43. else
  44. return true;
  45. }
  46. //邮件发送处理
  47. function send( $to,$from,$subject,$message) {
  48. //连接服务器
  49. $this->lastact="connect";
  50. $this-> ;show_debug("连接到SMTP 服务器: ".$this->smtp, "out");
  51. $this->fp = fsockopen ( $this->smtp, $this->port );
  52. if ( $this->fp ) {
  53. $this->set_socket_blocking( $this->fp, true );
  54. $this->lastmessage=fgets($this-> fp,512);
  55. $this->show_debug($this->lastmessage, "in");
  56. if (! ereg ( "^220", $this->lastmessage ) ) {
  57. return false;
  58. }else{
  59. $this->lastact="HELO " . $this->환영합니다. "n";
  60. if(!$this->do_command($this->lastact, "250")){
  61. fclose($this->fp);
  62. return false;
  63. }
  64. $this->lastact="메일 보낸 사람: $from" . "n";
  65. if(!$this->do_command($this->lastact, "250")){
  66. fclose($this->fp);
  67. return false;
  68. }
  69. $this->lastact="RCPT 대상: $to" . "n";
  70. if(!$this->do_command($this->lastact, "250")){
  71. fclose($this->fp);
  72. return false;
  73. }
  74. //开始发送邮件正文
  75. $this->lastact="DATAn";
  76. if(!$this->do_command($this->lastact, "354") ){
  77. fclose($this->fp);
  78. return false;
  79. }
  80. //开始处理邮件主题头
  81. $head="제목: $subjectn";
  82. if(!empty($subject) && !ereg($head, $message)){
  83. $message = $head.$message;
  84. }
  85. //开始处理邮件From头
  86. $head="From: $fromn";
  87. if(!empty($from) && !ereg($head, $message)) {
  88. $message = $head.$message;
  89. }
  90. //开始处理邮件To头
  91. $head="대상: $ton";
  92. if(!empty($to) && !ereg($head, $message)) {
  93. $message = $head.$message;
  94. }
  95. //处理结束串
  96. if(!ereg("n.n", $message))
  97. $message .= "n.n";
  98. $ this->show_debug($message, "out");
  99. fputs($this->fp, $message);
  100. $this->lastact="QUITn";
  101. if(! $this->do_command($this->lastact, "250")){
  102. fclose($this->fp);
  103. return false;
  104. }
  105. }
  106. return true;
  107. }else{
  108. $this->show_debug("连接失败!", "in");
  109. return false;
  110. }
  111. }
  112. }
  113. ?>
复代码

소켓을 사용하여 이메일을 보내는 예:

  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으로 문의하세요.