首頁 php教程 php手册 如何使用PHP通过SMTP发送电子邮件

如何使用PHP通过SMTP发送电子邮件

Jun 21, 2016 am 08:59 AM
headers mail smtp

  由于PHP没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用。本文的目的在于为新手指明方向,并没有涉及那些高级的内容,一来本身水平有限,二来也担心不能准确的讲述相关的概念,进而对各位造成误导,还请自行深入学习。

  “使用php发送mail”最近已经成为继“register_globals”以后本版第二个新手陷阱,今天特地写这篇文章为新手解惑,希望可以为迷茫的人指明方向。

  让我们先从以下这个例子开始说起:

  引用:

[root@server~/]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.domain.com.br ESMTP Postfix (2.1.0)
MAIL FROM: teste@dominio.com.br
250 Ok
RCPT TO: teste@dominio.com.br
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
teste
.
250 Ok: queued as 7B41F4665A
QUIT
221 Bye
Connection closed by foreign host.

  注:以上来自netkiller的postfix文档,偷懒,直接用现成的。

  首先是使用telnet来连接本地的25端口,稍微熟悉点网络的人都知道smtp协议使用25端口,这也就是说,现在在连接本地的smtp服务器。

  引用:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.domain.com.br ESMTP Postfix (2.1.0)

  这些东西是系统输出信息,说明已经连接上了,而且这个smtp服务器是postfix做的。

  “MAIL FROM: teste@dominio.com.br”这个命令指明了发件地址是teste@dominio.com.br,“250 Ok”说明这条命令被服务器接受并正确执行,这类似http协议的200、404、500等状态代码。接下来的“RCPT TO: teste@dominio.com.br”指明了收件地址是teste@dominio.com.br。

  引用:

DATA
354 End data with <CR><LF>.<CR><LF>
teste
.

  这一段是输入邮件正文,输入“DATA”以后系统提示使用“<回车>.<回车>”来结束输入,正文内容是“teste”。

  最后使用“QUIT”退出。

  以上就是最简单的一次发送mail的过程,从这个例子我们可以看出,发送mail其实是很简单的事情,实质上也就是建立一个对smtp服务器的连接,然后发送一些简单的命令给它,一封内容简单的邮件就发送出去了,至于更加复杂内容的邮件或者操作,其实也就是在此基础上稍加扩展而已。

  把这个过程用php来实现,其实就是利用php的Socket functions、Network Functions等等操作socket的函数来和smtp服务器建立一个连接,然后发送文本的命令给服务器,如果你亲自去看看那些写好的利用smtp协议发送邮件的类或者函数,相信可以印证我的说法。

由于已经存在很多现成的封装得很好的类或者函数替我们完成底层的socket级操作,我们只需要直接拿来用就好,而我也不会费时费神的在本文里去讨论底层的代码,有精神去研究的话,自己找代码来研究吧。现在继续跟我走,我们来点实际的代码来说明如何使用php发送邮件,采用的类是PEAR::Mail。

  代码:

<?php
 require_once 'Mail.php';

 $conf['mail'] = array(
   'host' => 'xx.xx.xx.xx', //smtp服务器地址,可以用ip地址或者域名
   'auth' => true, //true表示smtp服务器需要验证,false代码不需要
   'username' => 'tester', //用户名
   'password' => 'retset' //密码
 );

 /***
 * 使用$headers数组,可以定义邮件头的内容,比如使用$headers['Reply-To']可以定义回复地址
 * 通过这种方式,可以很方便的定制待发送邮件的邮件头
 ***/
 $headers['From'] = 'tester@domain.com'; //发信地址
 $headers['To'] = 'tester@domain.com'; //收信地址
 $headers['Subject'] = 'test mail send by php'; //邮件标题
 $mail_object = &Mail::factory('smtp', $conf['mail']);

 $body = <<< MSG //邮件正文
 hello world!!!
 MSG;

 $mail_res = $mail_object->send($headers['To'], $headers, $body); //发送

 if( Mail::isError($mail_res) ){ //检测错误
  die($mail_res->getMessage());
 }
?>


  以上的代码非常的简单,配合注释应该不难看懂,关于PEAR和PEAR::Mail的更多信息,可以自己去翻阅PEAR Manual得到进一步的信息。

  现在你依葫芦画瓢已经可以开始工作了,不过如果你还想做得更好、做得更多的话,我在这里提供一些更多的指南。

  1、SMTP协议

  熟悉并了解SMTP协议的内容,这样你可以进行更多的高级操作,甚至自己写一个满足自己特别需求的发邮件程序。以上的代码虽然简单,但是肯定还是有很多人不了解注释里提到的邮件头是什么东西,它到底对发出的邮件有什么样的影响。

  比如“发送html邮件为什么对方看到的是乱码”等等问题都可能和邮件头相关,如果对smtp协议比较了解的话,可以很快的知道问题所在。

  2、MIME规范

  如果想要发送html邮件甚至多媒体邮件,一定是需要对MIME有一定了解的,有了这方面的知识你就可以发送内容更加精彩的邮件。

  3、PEAR

  PEAR并非唯一的发送邮件的工具,但是PEAR包含了Mail、Mail_Mime等等已经封装好了的类,可以让我们的开发事半功倍,并且除了Mail方面的东西以外,它还提供了很多其他方面的现成的工具,非常值得花时间学一学。



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
php怎麼禁止smtp郵件功能 php怎麼禁止smtp郵件功能 Mar 22, 2023 pm 03:22 PM

PHP是一種強大的程式語言,廣泛應用於Web開發領域中,其中SMTP郵件功能也是PHP開發中的重要一環。但是,在某些情況下,您可能想要禁止SMTP郵件功能,本文將介紹如何實作。

PHP Mail 用法指南:簡單易懂的郵件發送教學課程 PHP Mail 用法指南:簡單易懂的郵件發送教學課程 Mar 28, 2024 pm 12:12 PM

PHP是一種廣泛應用於開發網頁應用程式的腳本語言,它提供了許多用來處理郵件發送的功能。本文將向大家介紹PHP如何使用郵件傳送功能,同時提供具體的程式碼範例。一、準備工作在使用PHP發送郵件前,首先需要確保你的伺服器已經配置了發送郵件的環境。一般來說,你需要一個SMTP伺服器來傳送郵件。你可以使用你的郵件提供商提供的SMTP伺服器,例如Gmail的SMTP

如何使用PHP實現基於SMTP協定的郵件通信 如何使用PHP實現基於SMTP協定的郵件通信 Jul 30, 2023 pm 04:45 PM

如何使用PHP實現基於SMTP協定的郵件通訊隨著網路的普及,電子郵件成為人們日常生活和工作中不可或缺的一部分。在PHP中,我們可以利用SMTP(SimpleMailTransferProtocol)協定來實現郵件的傳送與接收。本文將為大家介紹如何使用PHP來實現基於SMTP協議的郵件通信,並附帶相關的程式碼範例。引用SMTP類別庫要使用SMTP協議,我們

如何在Go中使用SMTP發送郵件? 如何在Go中使用SMTP發送郵件? May 11, 2023 pm 05:00 PM

隨著現代社會的快節奏發展,郵件已成為一種易於使用且普遍接受的溝通方式。隨著越來越多的應用程式需要向用戶發送電子郵件通知,使用程式發送電子郵件已成為一項重要且必要的任務。 Go語言作為一種快速、簡單且具有高並發性的程式語言,能夠輕鬆地實現電子郵件發送的功能。在本文中,我們將介紹如何在Go中使用SMTP發送郵件。 SMTP是一種用於電子郵件傳輸的標準協定。在Go

怎麼使用Java自帶的mail API實現郵件發送功能 怎麼使用Java自帶的mail API實現郵件發送功能 May 11, 2023 pm 12:49 PM

需求:郵件發送使用jdk來源生API-java.mail實作寄郵件功能以下程式碼即可傳送郵件,以qq信箱為例packagecom.example.demo.emailInfo;importjavax.mail.Message;importjavax.mail.MessagingException; importjavax.mail.Session;importjavax.mail.Transport;importjavax.mail.internet.Inte

PHP使用簡單郵件傳輸協定(SMTP)傳送郵件的方法 PHP使用簡單郵件傳輸協定(SMTP)傳送郵件的方法 May 22, 2023 pm 12:40 PM

隨著網路的發展,郵件已經成為了人們日常交流的重要方式之一。而對於某些網站開發者來說,在網站中發送郵件也顯得特別關鍵。 PHP作為一種伺服器端腳本語言,自然也需要提供一種發送郵件的方式。本文就將介紹PHP使用簡單郵件傳輸協定(SMTP)傳送郵件的方法。 SMTP介紹簡單郵件傳輸協定(SimpleMailTransferProtocol,簡稱SMTP)是用於

SpringBoot Mail郵件任務怎麼配置 SpringBoot Mail郵件任務怎麼配置 May 12, 2023 pm 10:37 PM

一、引言發送郵件應該是網站的必備功能之一,什麼註冊驗證,忘記密碼或是傳送行銷訊息給使用者。最早期的時候我們會使用JavaMail相關api來寫發送郵件的相關程式碼,後來spring退出了JavaMailSender更加簡化了郵件發送的過程,在之後springboot對此進行了封裝就有了現在的spring-boot-starter- mail。二、簡單使用1、pom包配置pom包裡面添加spring-boot-starter-mail包引用org.springframework.bootspring-

PHP SMTP設定:確保郵件的可靠傳輸。 PHP SMTP設定:確保郵件的可靠傳輸。 Sep 19, 2023 pm 12:53 PM

PHPSMTP設定:確保郵件的可靠傳輸郵件是現代通訊中不可或缺的一部分,無論是在商業,個人或社交領域,都需要透過郵件來傳遞訊息和溝通。在使用PHP編寫網站或應用程式時,我們經常需要使用SMTP伺服器來傳送郵件。本文將介紹如何在PHP中設定SMTP,以確保郵件的可靠傳輸。什麼是SMTP? SMTP(SimpleMailTransferProtocol)

See all articles