欢迎光临
我们一直在努力

在PHP中用Socket发送电子邮件(三)-PHP教程,PHP应用

建站超值云服务器,限时71元/月

邮件发送处理

  下面是真正的秘密了,可要看仔细了。:)

——————————————————————————–

1 function send( $to,$from,$subject,$message)

2 {

3

4 //连接服务器

5 $this->lastact="connect";

6

7 $this->show_debug("connect to smtp server : ".$this->smtp, "out");

8 $this->fp = fsockopen ( $this->smtp, $this->port );

9 if ( $this->fp )

10 {

11

12 set_socket_blocking( $this->fp, true );

13 $this->lastmessage=fgets($this->fp,512);

14 $this->show_debug($this->lastmessage, "in");

15

16 if (! ereg ( "^220", $this->lastmessage ) )

17 {

18 return false;

19 }

20 else

21 {

22 $this->lastact="helo " . $this->welcome . "\n";

23 if(!$this->do_command($this->lastact, "250"))

24 {

25 fclose($this->fp);

26 return false;

27 }

28

29 $this->lastact="mail from: $from" . "\n";

30 if(!$this->do_command($this->lastact, "250"))

31 {

32 fclose($this->fp);

33 return false;

34 }

35

36 $this->lastact="rcpt to: $to" . "\n";

37 if(!$this->do_command($this->lastact, "250"))

38 {

39 fclose($this->fp);

40 return false;

41 }

42

43 //发送正文

44 $this->lastact="data\n";

45 if(!$this->do_command($this->lastact, "354"))

46 {

47 fclose($this->fp);

48 return false;

49 }

50

51 //处理subject头

52 $head="subject: $subject\n";

53 if(!empty($subject) && !ereg($head, $message))

54 {

55 $message = $head.$message;

56 }

57

58 //处理from头

59 $head="from: $from\n";

60 if(!empty($from) && !ereg($head, $message))

61 {

62 $message = $head.$message;

63 }

64

65 //处理to头

66 $head="to: $to\n";

67 if(!empty($to) && !ereg($head, $message))

68 {

69 $message = $head.$message;

70 }

71

72 //加上结束串

73 if(!ereg("\n\.\n", $message))

74 $message .= "\n.\n";

75 $this->show_debug($message, "out");

76 fputs($this->fp, $message);

77

78 $this->lastact="quit\n";

79 if(!$this->do_command($this->lastact, "250"))

80 {

81 fclose($this->fp);

82 return false;

83 }

84 }

85 return true;

86 }

87 else

88 {

89 $this->show_debug("connect failed!", "in");

90 return false;

91 }

92 }

——————————————————————————–

  有些意思很清楚的我就不说了。

  这个函数一共有四个参数,分别是$to表示收信人,$from表示发信人,$subject表求邮件主题和$message表示邮件体。如果处理成功则返回true,失败则返回false。

第8行,连接邮件服务器,如果成功响应码应为220。

第12行,设置阻塞模式,表示信息必须返回才能继续。详细说明看手册吧。

第16行,判断响应码是否为220,如果是,则继续处理,否则出错返回。

第22-27行,处理helo指令,期望响应码为250。

第29-34行,处理mail from指令,期望响应码为250。

第36-41行,处理rcpt to指令,期望响应码为250。

第44-49行,处理data指令,期望响应码为354。

第51-76行,生成邮件体,并发送。

第52-56行,如果$subject不为空,则查找邮件体中是否有主题部分,如果没有,则加上主题部分。

第59-63行,如果$from不为空,则查找邮件体中是否有发信人部分,如果没有,则加上发信人部分。

第66-70行,如果$to不为空,则查找邮件体中是否有收信人部分,如果没有,则加上收信人部分。

第73-74行,查找邮件体是否有了结束行,如果没有则加上邮件体的结束行(以"."作为单独的一行的特殊行)。

第76行,发送邮件体。

第78-83行,执行quit结否与服务器的连接,期望响应码为250。

第85行,返回处理成功标志(true)。

第81-91行,与服务器连接失败的处理。

 以上为整个send_mail类的实现,应该不是很难的。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在PHP中用Socket发送电子邮件(三)-PHP教程,PHP应用
分享到: 更多 (0)