【问题标题】:Sending emails from 1and1 smtp server using Zend Framework使用 Zend Framework 从 1and1 smtp 服务器发送电子邮件
【发布时间】:2011-08-02 10:17:48
【问题描述】:

我知道已经有很多关于 smtp、1and1 托管和 Zend Framework 的问题。我已经阅读了几个小时,但仍然一无所获(也许我忽略了最重要的一个?)。那么让我们进入正题:

  • 我一遍又一遍地 同样的错误“消息:连接 拒绝“,不管我是什么 smtp 试图使用。我知道像 gmail 这样的外部服务器可能存在问题(我也尝试过),但是 1and1 smpt...

  • 我使用的是相当普通的配置:

    email.configTransport.auth = "登录" email.configTransport.username = "my@mail.com" email.configTransport.password = "密码" email.configTransport.host = "smtp.1and1.pl"

然后在引导程序中我设置默认传输:

protected function _initDefaultEmailTransport(){
    
    $configTransport = $this->getOption('email');

    $tr = new Zend_Mail_Transport_Smtp($configTransport['configTransport']['host'],
                                        $configTransport['configTransport']);
    
    Zend_Mail::setDefaultTransport($tr);
}
  • 它最有趣的地方是什么 我的本地主机(也通过 Thunderbird)。所以我猜配置没问题,并且 smtp 服务器可以正常工作。
  • 我一直在尝试使用端口 25 和 587。 同样的问题。 如果我为错误的密码更改密码,我会再次收到相同的错误,所以看起来我在连接阶段遇到了问题,不是吗?

如果有任何可能出错的想法,我将不胜感激。


我没有看到可以覆盖它的地方。除此之外,我尝试了生产和开发配置。 OpenSSL 肯定是启用的,我已经检查过了。这是我的配置文件。

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutpath = APPLICATION_PATH "/layouts/scripts/"

autoloaderNamespaces[] = "Doctrine"

doctrine.dsn = "mysql://...."

doctrine.data_fixtures_path = APPLICATION_PATH "/../doctrine/data/fixtures"
doctrine.models_path = APPLICATION_PATH "/models"
doctrine.migrations_path = APPLICATION_PATH "/../doctrine/migrations"
doctrine.sql_path = APPLICATION_PATH "/../doctrine/data/sql"
doctrine.yaml_schema_path = APPLICATION_PATH "/../doctrine/schema"

doctrine.generate_models_options.pearStyle = true
doctrine.generate_models_options.generateTableClasses = true
doctrine.generate_models_options.generateBaseClasses = true
doctrine.generate_models_options.baseClassPrefix = "Base_"
doctrine.generate_models_options.baseClassesDirectory =
doctrine.generate_models_options.classPrefixFiles = false
doctrine.generate_models_options.classPrefix = "Application_Model_"

resources.mail.transport.type = "smtp"
resources.mail.transport.host = "smtp.gmail.com"
resources.mail.transport.auth = "login"
resources.mail.transport.ssl = "tls"
resources.mail.transport.username = "username"
resources.mail.transport.password = "pass"
resources.mail.transport.register = true

autoloaderNamespaces[] = "ZC"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

这是完整的错误信息:

Stack trace:

#0 /homepages/46/d339149978/htdocs/library/Zend/Mail/Protocol/Smtp.php(167): Zend_Mail_Protocol_Abstract->_connect('tcp://smtp.gmai...')
#1 /homepages/46/d339149978/htdocs/library/Zend/Mail/Transport/Smtp.php(199): Zend_Mail_Protocol_Smtp->connect()
#2 /homepages/46/d339149978/htdocs/library/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Smtp->_sendMail()
#3 /homepages/46/d339149978/htdocs/library/Zend/Mail.php(1178): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail))
#4 /homepages/46/d339149978/htdocs/application/controllers/ContactController.php(97): Zend_Mail->send()
#5 /homepages/46/d339149978/htdocs/application/controllers/ContactController.php(74): ContactController->sendContactMail(Array)
#6 /homepages/46/d339149978/htdocs/library/Zend/Controller/Action.php(513): ContactController->sendAction()
#7 /homepages/46/d339149978/htdocs/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('sendAction')
#8 /homepages/46/d339149978/htdocs/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#9 /homepages/46/d339149978/htdocs/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#10 /homepages/46/d339149978/htdocs/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#11 /homepages/46/d339149978/htdocs/public/index.php(27): Zend_Application->run()
#12 {main}  

周日我向 1and1 发送了一封电子邮件,询问通过 SMTP 发送电子邮件是否有任何问题。今天收到回复说一切正常,我必须检查我的脚本...

【问题讨论】:

    标签: php zend-framework email smtp


    【解决方案1】:

    它可能不是“最佳”解决方案,但它可以帮助您确保手动设置不会产生错误。

    resources.mail.transport.type = "smtp"
    resources.mail.transport.host = "smtp.gmail.com"
    resources.mail.transport.auth = "login"
    resources.mail.transport.ssl = "tls"
    resources.mail.transport.username = "yourlogin" ; without the @ part
    resources.mail.transport.password = "yourpasswd"
    resources.mail.transport.register = true
    

    用你的替换yourlogin & yourpasswd,它应该可以工作。

    最后一个选项,register 注册您之前设置的默认传输。


    如您的评论中所述,如果它在本地工作,这里是一个检查清单:

    • 确保您的 APPLICATION_ENV 不会覆盖您的设置(productiondevelopment
    • 确保在您的主机上安装了OpenSSL(需要使用安全连接来连接到 Gmail)
    • 发布您的错误信息
    • 发布您的 config.ini

    【讨论】:

    • 再次在本地工作,但在线服务器返回错误...无论如何感谢您的帮助。
    【解决方案2】:

    无论我尝试使用什么 smtp,我都会一遍又一遍地遇到相同的错误“消息:连接被拒绝”

    “连接被拒绝”意味着远程服务器拒绝了连接,或者本地计算机具有阻止创建连接的防火墙或安全策略。

    如果无论您连接到哪个 SMTP 服务器都收到该错误,那么您的托管服务提供商正在阻止连接。您需要联系他们询问问题。

    请注意,1&1 在过去十年中一​​直是糟糕的托管服务提供商,应该避免使用。即使是最便宜的提供商之一 Dreamhost 也能提供更好的服务。

    【讨论】:

      【解决方案3】:

      我花了好几个小时尝试一切,让 1and1 服务器接受 SMTP 邮件。它在远程测试服务器上工作(使用以下内容:

      $mailhost = 'auth.smtp.1and1.co.uk';
      $mailconfig = array('auth'     => 'login',
                          'username' => 'myaddress@example.com',
                  'password' => 'myPassword');
      $transport = new Zend_Mail_Transport_Smtp($mailhost, $mailconfig);
      Zend_Mail::setDefaultTransport($transport);
      

      当我在 1and1 上部署它时,我得到“连接被拒绝”。其他论坛坚持认为这是因为 1and1 不允许在他们自己的服务器上使用 SMTP,所以您必须使用 Sendmail() 代替。 那么上面的脚本就变成了:-

      $transport = new Zend_Mail_Transport_Sendmail('-freturn_to_myaddress@example.com');
      Zend_Mail::setDefaultTransport($transport);
      

      (注意,我已经输入了退货地址)

      这将适用于 1and1 服务器。

      克里斯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-01
        • 2019-05-15
        • 2018-05-22
        • 2012-06-10
        • 2016-09-07
        • 1970-01-01
        相关资源
        最近更新 更多