PHP Perl - mail / mime.php无法打开流

时间:2015-04-01 03:43:39

标签: php php-5.5

我需要一些帮助,如何使用Perl发送电子邮件。

当我尝试运行此代码时:

require_once ("Mail.php");
require_once ("Mail/mime.php");

$text = "test";
$html_message = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>....</title>
</head>
<body>
    <p>...</p>
</body>
</html>';

$headers["From"] = 'sample@sampel.com';
$headers["To"] = "sample@sampel.com"; 
$headers["Subject"] = "Sample SMTP PERL";
$headers["Content-Type"] = 'text/html; charset=UTF-8';
$headers["Content-Transfer-Encoding"]= "8bit";

$mime = new Mail_mime; 
$mime->setTXTBody($text); 
$mime->setHTMLBody($html_message); 
$mimeparams=array(); 

// It refused to change to UTF-8 even if the header was set to this, after adding the following lines it worked.

$mimeparams['text_encoding']="8bit"; 
$mimeparams['text_charset']="UTF-8"; 
$mimeparams['html_charset']="UTF-8"; 
$mimeparams['head_charset']="UTF-8"; 

$mimeparams["debug"] = "True"; 

$body = $mime->get($mimeparams); 
$headers = $mime->headers($headers); 
$page_content = "Mail now."; 

// SMTP server name, port, user/passwd 
$smtpinfo["host"] = "xxx;
$smtpinfo["port"] = "465";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = "sample@sample.com";
$smtpinfo["password"] = "xxx";
$smtpinfo["debug"] = "True"; 


// Create the mail object using the Mail::factory method
$mail=& Mail::factory("smtp", $smtpinfo);

$mail->send($to, $headers, $body));

我收到此错误消息:

PHP Warning:  require_once(Mail/mime.php): failed to open stream: No
such file or directory in /home3/xxx/public_html/xxx/zzz/ccc/vvv.php
on line 203 

PHP Fatal error:  require_once(): Failed opening required
'Mail/mime.php'

(include_path='.:/usr/php/54/usr/lib64:/usr/php/54/usr/share/pear:/usr/lib/php/PEAR')
in /home3/xxx/public_html/xxx/zzz/ccc/vvv.php on line 203

而且我不知道如何解决这个问题。请帮忙。

2 个答案:

答案 0 :(得分:1)

确保已安装所需的PEAR软件包。

Mail.php是“邮件”的一部分,而mime.php是“ Mail_Mime”的一部分。

pear install Mail Mail_Mime

答案 1 :(得分:0)

首先,这是php,而不是Perl。如果你通过perl口译员提供这个,你会得到各种各样的错误,与你得到的错误大不相同。 (对不起,如果听起来有意思......我打算提供信息。)

其次,错误消息非常有用。它说明了什么是允许的,什么不是

  

(包含路径=&#39;:在/ usr / PHP / 54 / USR / lib64下:在/ usr / PHP / 54 / USR /共享/梨:/ usr / lib中/ PHP / PEAR&#39)

通常,这是因为路径无效或文件系统权限。

要排除文件系统权限是罪魁祸首,您可以检查是否允许每个人读取文件(Linux中的cd path/to/Mail; chmod a+r mime.php)。如果&#34;运行Web服务器的用户&#34; (通常是非特权用户)无法读取文件(或者对Mail文件夹没有执行权限,可以使用cd path/to/Mail; cd ..; chmod a+x Mail授予),然后无法导入(或需要)文件Mail / mime.php 。根据环境的不同,文件系统权限可能会导致这些问题(在许多Linux发行版上使用默认的umask时,网络主机配置不稳定,自行滚动等)。这是第一个看的地方。执行权限不仅在该文件夹上是必需的,而且在文件系统树的任何地方都是必需的。

您的include_path会告诉您查找文件的位置。 &#39;。&#39;在开头说&#34;当前目录&#34;。 Mail.php可能没有抛出错误是因为除了您认为的那个之外,还有一些Mail.php可用。

许多人建议总是使用绝对路径而不是相对路径(就像你的require_once那样),以避免意外和意外行为。

这很大程度上取决于Mail.php和Mail / mime.php在目录结构中相对于php脚本所在的位置。您的PHP脚本的父文件夹是&#39;。&#39;。您需要确保Mail.php和Mail / mime.php的路径是相对于该路径的。例如,如果你有:

/path/to/my/web/stuff/admin/this.php
/path/to/my/web/stuff/Mail.php
/path/to/my/web/stuff/Mail/mime.php

在this.php中,您必须参考&#39; ../ Mail.php&#39;和&#39; ../ Mail / mime.php&#39;对于require_once语句,因为这些文件存在于this.php所在的目录中。

基本上,如果没有关于文件权限和目录结构的信息,我们可以提供的很少。我希望这个常见问题的概述是有帮助的。如果您可以更新您的问题以包含有关目录结构的信息以及权限正确的肯定,则其他人可能可以帮助您解决此问题。