swiftmailer错误

时间:2012-04-05 10:04:20

标签: php swiftmailer

我正在尝试在我的网站上添加联系表单。在localhost它工作正常,现在移动Tiscali服务器我收到此错误:

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect.    
File(/tmp) is not within the allowed path(s):
(/var/www/virtual/mydomain.it/:/usr/share/php/:/var/www/ispcp/gui/tools/filemanager/) in /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/preferences.php on line 15`

致命错误: Uncaught exception Swift_TransportException' with message

'Expected response code 220 but got code "554",

 with message "554 santino.mail.tiscali.it ESMTP server not available from your IP "' in /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Transport/AbstractSmtpTransport.php:422 Stack trace: #0 /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Transport/AbstractSmtpTransport.php(315):`
Swift_Transport_AbstractSmtpTransport->_assertResponseCode('554 santino.mai...', Array)

 #1 /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Transport/AbstractSmtpTransport.php(123): Swift_Transport_AbstractSmtpTransport->_readGreeting()
 #2 /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start()

 #3 /var/www/virtual/mydomain.it/htdocs/prova-intro/mail_SwiftMailer.php(129): Swift_Mailer->send(Object(Swift_Message) in /var/www/virtual/mydomain.it/htdocs/prova-intro/Swift-4.1.6/lib/classes/Swift/Transport/AbstractSmtpTransport.php on line 422`

我正在使用的参数:

 define('HOST_SMTP', 'smtp.mydomain.it');  
 define('PORT_SMTP', 465); 
 define('SECUTITY_SMTP', ssl);
 define('EMAIL_SMTP', 'info@mydomain.it');  
 define('PASSWORD_SMTP', 'xxxxxxx');  
 define('EMAIL_DESTINATARIO', $_POST['destinatario']);  
 define('MAX_DIM_FILE', 1048576); // 1mb 

2 个答案:

答案 0 :(得分:4)

这很少见 - 从PHP发送邮件的报告错误与MTA无关!

Swiftmailer正在尝试创建一个临时文件。如果没有深入挖掘源代码,如果它是合理编写的,它应该使用tmpnam()或tmpfile()(除非显式覆盖使用“系统默认临时目录”。它通过查看一些环境变量来决定这一点 - 如果这些不存在,然后默认编译。

sys_get_temp_dir()函数

也返回使用的目录

(因为swiftmailer继续尝试发送一个无法创建的文件,这意味着代码中存在一个相当愚蠢的错误。)

实际上,设置open_basedir限制以确保正确配置其余PHP设置(会话保存路径,临时目录等)的责任。我向他们抱怨要妥善修理它。

在此期间尝试插入

$_ENV['TMPDIR']='/var/www/virtual/mydomain.it/tmp';
$_ENV['TMP']=$_ENV['TMPDIR'];

在脚本的顶部并创建相关目录,使其可由Web服务器写入。

请注意,tmpfile()页面上的相同错误消息为described in the comments

答案 1 :(得分:0)

symcbean的解决方案对我来说很好,除了一点必须使用putenv()才能修改环境变量。

所以我写了这样的话:

<?php
// web/app_dev.php 
// in prod the warning should not raise an exception, 
// but this depends on the error handling

use [..]

$tmpDir = __DIR__.'/../app/cache';

putenv('TMP='.$tmpDir);
putenv('TMPDIR='.$tmpDir);
putenv('TEMP='.$tmpDir);

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
[..]