2012-04-05 32 views
1

我正在尝试向我的网站添加一个联系表单。在本地主机它工作得很好,现在正在Tiscali公司的服务器上,我得到这个错误:swiftmailer错误

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', '[email protected]'); 
define('PASSWORD_SMTP', 'xxxxxxx'); 
define('EMAIL_DESTINATARIO', $_POST['destinatario']); 
define('MAX_DIM_FILE', 1048576); // 1mb 
+0

对于您的错误信息,它看起来S形W​​eb服务器的机器是无法通信的SMTP服务器。我不认为它是swiftmailer的错,但是与你的Web服务器的机器或者SMTP服务器的配置有关。 – F21 2012-04-05 10:09:50

回答

4

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

Swiftmailer正试图创建一个临时文件。如果没有深入了解源代码,如果明智地写了它,应该使用tmpnam()或tmpfile()(除非显式覆盖使用“系统默认临时目录”),它通过查看一些环境变量来确定 - 如果这些不存在,那么在默认的编译。

使用也由sys_get_temp_dir()函数返回的目录

(因为swiftmailer接着尝试发送其未能创造意味着在一个相当愚蠢的错误文件它的代码)

真的,这是谁设置open_basedir限制,以确保其余的PHP设置配置c (会话保存路径,临时目录等)。我会抱怨他们正确地修复它。

在此期间尝试在你的脚本的顶部插入

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

,并创建相关目录,使其可写,则由服务器。

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

+0

我无法解决问题。获取相同的错误。我将要求我的提供商解决这些限制。感谢您的帮助 – Franc 2012-04-05 15:42:23

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'; 
[..]