热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为本地可以发送邮件,linux上不行

我的本地环境可以发送邮件,linux上不行

我的本地环境可以发送邮件,linux上不行



代码是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331



class smtp

{

 /* Public Variables */

 public $smtp_port;

 public $time_out;

 public $host_name;

 public $log_file;

 public $relay_host;

 public $debug;

 public $auth;

 public $user;

 public $pass;



 /* Private Variables */

 private $sock;



 /* Constractor */

 function smtp($relay_host = "", $smtp_port = 25, $auth = false, $user, $pass)

 {

  $this->debug = FALSE;

  $this->smtp_port = $smtp_port;

  $this->relay_host = $relay_host;

  $this->time_out = 30; //is used in fsockopen()

  #

  $this->auth = $auth;//auth

  $this->user = $user;

  $this->pass = $pass;

  #

  $this->host_name = "localhost"; //is used in HELO command

  $this->log_file = "";



  $this->sock = FALSE;

 }



 /* Main Function */

 function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")

 {

  $mail_from = $this->get_address($this->strip_comment($from));

  $body = preg_replace("/(^|(\r\n))(\\.)/", "\\1.\\3", $body);

  $header = "MIME-Version:1.0\r\n";

  if ($mailtype == "HTML") {

   $header .= "Content-Type:text/html\r\n";

  }

  $header .= "To: " . $to . "\r\n";

  if ($cc != "") {

   $header .= "Cc: " . $cc . "\r\n";

  }

  $header .= "From: $from<" . $from . ">\r\n";

  $header .= "Subject: " . $subject . "\r\n";

  $header .= $additional_headers;

  $header .= "Date: " . date("r") . "\r\n";

  $header .= "X-Mailer:By Redhat (PHP/" . phpversion() . ")\r\n";

  list($msec, $sec) = explode(" ", microtime());

  $header .= "Message-ID: <" . date("YmdHis", $sec) . "." . ($msec * 1000000) . "." . $mail_from . ">\r\n";

  $TO = explode(",", $this->strip_comment($to));



  if ($cc != "") {

   $TO = array_merge($TO, explode(",", $this->strip_comment($cc)));

  }



  if ($bcc != "") {

   $TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));

  }



  $sent = TRUE;

  foreach ($TO as $rcpt_to) {

   $rcpt_to = $this->get_address($rcpt_to);

   if (!$this->smtp_sockopen($rcpt_to)) {

    $this->log_write("Error: Cannot send email to " . $rcpt_to . "\n");

    $sent = FALSE;

    continue;

   }

   if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {

    $this->log_write("E-mail has been sent to <" . $rcpt_to . ">\n");

   } else {

    $this->log_write("Error: Cannot send email to <" . $rcpt_to . ">\n");

    $sent = FALSE;

   }

   fclose($this->sock);

   $this->log_write("Disconnected from remote host\n");

  }

  echo "
";

  echo $header;

  return $sent;

 }



 /* Private Functions */



 function smtp_send($helo, $from, $to, $header, $body = "")

 {

  if (!$this->smtp_putcmd("HELO", $helo)) {

   return $this->smtp_error("sending HELO command");

  }

  #auth

  if ($this->auth) {

   if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {

    return $this->smtp_error("sending HELO command");

   }

   if (!$this->smtp_putcmd("", base64_encode($this->pass))) {

    return $this->smtp_error("sending HELO command");

   }

  }

  #

  if (!$this->smtp_putcmd("MAIL", "FROM:<" . $from . ">")) {

   return $this->smtp_error("sending MAIL FROM command");

  }



  if (!$this->smtp_putcmd("RCPT", "TO:<" . $to . ">")) {

   return $this->smtp_error("sending RCPT TO command");

  }



  if (!$this->smtp_putcmd("DATA")) {

   return $this->smtp_error("sending DATA command");

  }



  if (!$this->smtp_message($header, $body)) {

   return $this->smtp_error("sending message");

  }



  if (!$this->smtp_eom()) {

   return $this->smtp_error("sending . [EOM]");

  }



  if (!$this->smtp_putcmd("QUIT")) {

   return $this->smtp_error("sending QUIT command");

  }



  return TRUE;

 }



 function smtp_sockopen($address)

 {

  if ($this->relay_host == "") {

   return $this->smtp_sockopen_mx($address);

  } else {

   return $this->smtp_sockopen_relay();

  }

 }



 function smtp_sockopen_relay()

 {

  $this->log_write("Trying to " . $this->relay_host . ":" . $this->smtp_port . "\n");

  $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);

  if (!($this->sock && $this->smtp_ok())) {

   $this->log_write("Error: Cannot connenct to relay host " . $this->relay_host . "\n");

   $this->log_write("Error: " . $errstr . " (" . $errno . ")\n");

   return FALSE;

  }

  $this->log_write("Connected to relay host " . $this->relay_host . "\n");

  return TRUE;

 }



 function smtp_sockopen_mx($address)

 {

  $domain = preg_replace("/^.+@([^@]+)$/", "\\1", $address);

  if (!@getmxrr($domain, $MXHOSTS)) {

   $this->log_write("Error: Cannot resolve MX "" . $domain . ""\n");

   return FALSE;

  }

  foreach ($MXHOSTS as $host) {

   $this->log_write("Trying to " . $host . ":" . $this->smtp_port . "\n");

   $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);

   if (!($this->sock && $this->smtp_ok())) {

    $this->log_write("Warning: Cannot connect to mx host " . $host . "\n");

    $this->log_write("Error: " . $errstr . " (" . $errno . ")\n");

    continue;

   }

   $this->log_write("Connected to mx host " . $host . "\n");

   return TRUE;

  }

  $this->log_write("Error: Cannot connect to any mx hosts (" . implode(", ", $MXHOSTS) . ")\n");

  return FALSE;

 }



 function smtp_message($header, $body)

 {

  fputs($this->sock, $header . "\r\n" . $body);

  $this->smtp_debug("> " . str_replace("\r\n", "\n" . "> ", $header . "\n> " . $body . "\n> "));



  return TRUE;

 }



 function smtp_eom()

 {

  fputs($this->sock, "\r\n.\r\n");

  $this->smtp_debug(". [EOM]\n");



  return $this->smtp_ok();

 }



 function smtp_ok()

 {

  $respOnse= str_replace("\r\n", "", fgets($this->sock, 512));

  $this->smtp_debug($response . "\n");



  if (!preg_match("/^[23]/", $response)) {

   fputs($this->sock, "QUIT\r\n");

   fgets($this->sock, 512);

   $this->log_write("Error: Remote host returned "" . $response . ""\n");

   return FALSE;

  }

  return TRUE;

 }



 function smtp_putcmd($cmd, $arg = "")

 {

  if ($arg != "") {

   if ($cmd == "") $cmd = $arg;

   else $cmd = $cmd . " " . $arg;

  }



  fputs($this->sock, $cmd . "\r\n");

  $this->smtp_debug("> " . $cmd . "\n");



  return $this->smtp_ok();

 }



 function smtp_error($string)

 {

  $this->log_write("Error: Error occurred while " . $string . ".\n");

  return FALSE;

 }



 function log_write($message)

 {

  $this->smtp_debug($message);



  if ($this->log_file == "") {

   return TRUE;

  }



  $message = date("M d H:i:s ") . get_current_user() . "[" . getmypid() . "]: " . $message;

  if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {

   $this->smtp_debug("Warning: Cannot open log file "" . $this->log_file . ""\n");

   return FALSE;

  }

  flock($fp, LOCK_EX);

  fputs($fp, $message);

  fclose($fp);



  return TRUE;

 }



 function strip_comment($address)

 {

  $comment = "/\\([^()]*\\)/";

  while (preg_match($comment, $address)) {

   $address = preg_replace($comment, "", $address);

  }



  return $address;

 }



 function get_address($address)

 {

  $address = preg_replace("/([ \t\r\n])+/", "", $address);

  $address = preg_replace("/^.*<(.+)>.*$/", "\\1", $address);



  return $address;

 }



 function smtp_debug($message)

 {

  if ($this->debug) {

   echo $message . "
";

  }

 }



 function get_attach_type($image_tag)

 { //



  $filedata = array();



  $img_file_con = fopen($image_tag, "r");

  unset($image_data);

  while ($tem_buffer = AddSlashes(fread($img_file_con, filesize($image_tag))))

   $image_data = $tem_buffer;

  fclose($img_file_con);



  $filedata['context'] = $image_data;

  $filedata['filename'] = basename($image_tag);

  $extension = substr($image_tag, strrpos($image_tag, "."), strlen($image_tag) - strrpos($image_tag, "."));

  switch ($extension) {

   case ".gif":

    $filedata['type'] = "image/gif";

    break;

   case ".gz":

    $filedata['type'] = "application/x-gzip";

    break;

   case ".htm":

    $filedata['type'] = "text/html";

    break;

   case ".html":

    $filedata['type'] = "text/html";

    break;

   case ".jpg":

    $filedata['type'] = "image/jpeg";

    break;

   case ".tar":

    $filedata['type'] = "application/x-tar";

    break;

   case ".txt":

    $filedata['type'] = "text/plain";

    break;

   case ".zip":

    $filedata['type'] = "application/zip";

    break;

   default:

    $filedata['type'] = "application/octet-stream";

    break;

  }

  return $filedata;

 }



} // end cla



$smtpserver = "smtp.163.com";//SMTP服务器

$smtpserverport = 25;//SMTP服务器端口

$smtpusermail = "xxx163.com";//SMTP服务器的用户邮箱

$smtpemailto = "xxx@qq.com";//发送给谁

$smtpuser = "xxx@163.com";//SMTP服务器的用户帐号

$smtppass = "xxx";//SMTP服务器的用户密码

$mailsubject = "PHP测试邮件系统";//邮件主题

$mailbody = "

这是一个测试程序

";//邮件内容

$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件

##########################################

$smtp = new smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.

$smtp->debug = true;//是否显示发送的调试信息

$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);

错误提示是
Error: Cannot connenct to relay host smtp.163.com



查了网上说的
a.找到PHP.ini,查看两个地方,一个是allow_url_fopen,这个地方要设置成on;另一个地方是查disable_functions,如果后面出现了fsock,fsockopen,则需要把这两个函数去掉,重启apache,然后就可以正常发送邮件了。
都是正常的。


   



推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
author-avatar
孤魂地狱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有