我想在Zend Framework中制作电子邮件模板.
例如,
<html>
<body>
Dear {$username$},<br>
This is a invitation email sent by your {$friend$}.<br>
Regards,<br>
Admin
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想制作这个文件,在Zend框架中获取它,设置这些参数(用户名,朋友),然后发送电子邮件.
我怎样才能做到这一点?Zend支持这个吗?
我正在尝试用ZendMail发送一封电子邮件(这个简单的脚本总结了它)
<?php
require_once 'Zend/Mail.php';
$mail = new Zend_Mail();
$mail->setBodyText('My Nice Test Text');
$mail->setBodyHtml('My Nice Test Text');
$mail->setFrom('test@example.com', 'Mr Example');
$mail->addTo('contact@mypage.com', 'Mr Test');
$mail->setSubject('TestSubject');
$mail->send();
?>
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个堆栈跟踪:
Fatal error:
Uncaught exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. ' in /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Sendmail.php:137
Stack trace:
#0 /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Sendmail->_sendMail()
#1 /usr/share/php/libzend-framework-php/Zend/Mail.php(1178): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail))
#2 /var/www/hexreaction/mail/index2.php(11): Zend_Mail->send()
#3 {main} thrown in /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Sendmail.php on line 137
Run Code Online (Sandbox Code Playgroud)
编辑:
我不是试图使用SMTP发送我的电子邮件而且我的问题不那么可怕,但仍然存在问题.
<?php
require_once 'Zend/Mail.php';
$config = array('auth' => 'login',
'username' => 'contact@mypage.com',
'password' => 'secretpass');
$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config); …
Run Code Online (Sandbox Code Playgroud) 我有一个由php发送到gmail帐户的电子邮件的可疑消息ID标题:
Message-Id: <5100054f.a489440a.5d93.6a70SMTPIN_ADDED_MISSING@mx.google.com>
Run Code Online (Sandbox Code Playgroud)
你能否告诉它是否有这种奇怪的格式以及SMTPIN_ADDED_MISSING在这里的含义?我在互联网上看到的示例包含这样的格式包含发送域,但我的消息ID由于某种原因不包含它:
38D1C1FD-3C35-4568-925C-FC46CAC0DE8A@sendinghost.com
Run Code Online (Sandbox Code Playgroud)
我不认为我在Zend_Mail中设置此标头.什么生成此标题?你看到这个标题有什么问题吗?
Magento
不发送任何电子邮件,跨国,联系表格给出错误
cannot send your mail at this moment
Run Code Online (Sandbox Code Playgroud)
我检查了
/var/log/system.log和exception.log仅显示错误,而不是错误原因
exception 'Zend_Mail_Transport_Exception' with
message 'Unable to send mail. ' in
/var/webshop/httpdocs/lib/Zend/Mail/Transport/Sendmail.php:137
如何在不使用zend框架安装的情况下使用zend库?
我试图使用zend库(Mail和Mime)没有zend框架安装,它没有返回任何错误消息...但对于我的项目我只使用Mail和Mime库,如何使用Zend库而不安装zend框架. .
谢谢,Vinoth S.
我正在尝试Zend_Mail
使用以下代码发送邮件:
function sendMail() {
$config = array('auth' => 'login',
'username' => 'UserName',
'password' => 'Password',
'port'=>'27');
$mail = new Zend_Mail();
$mail->setBodyText($mailBody);
$mail->setFrom('example@host.com', 'The Company Name');
$mail->addTo('example@host.com', 'Recipient Name');
$mail->setSubject('Mail subject');
$mail->send(new Zend_Mail_Transport_Smtp('example@server.com', $config));
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是$mailBody
有法语字符.例如:
Merci d'avoir passé commande avec Lovre. Voici le récapitulatif de votre commande
Run Code Online (Sandbox Code Playgroud)
当然后查看发送的邮件时,同样的行显示如下:
Merci d'avoir pass? commande avec Lovre. Voici le r?capitulatif de votre commande
Run Code Online (Sandbox Code Playgroud)
口音被问号所取代!我尝试使用编码邮件正文utf8_encode
,但问题仍然存在.
注意:使用的文本文件读取正文内容file_get_contents
.
我正在开发一个包含简单电子邮件功能的zend框架应用程序.开发版本正在我的计算机上运行,该计算机正在运行Ubuntu.生产版本将在生产服务器上运行.
当我尝试向自己发送测试邮件时,我收到一条例外消息:"无法发送邮件".我不知道这是一个环境问题,还是代码问题.我没有使用交通工具,所以我认为它是默认的Zend_Mail_Transport_Sendmail
.这是我的代码:
public function sendtestAction()
{
$mail = new Zend_Mail();
$mail->setFrom('test@aol.com', 'Test Email');
$mail->addTo('my@email.com', 'My Name');
$mail->setSubject('This is just a test.');
$mail->setBodyText('This is only a test.');
$mail->send();
}
Run Code Online (Sandbox Code Playgroud)
更新:我尝试了一种不同的方法,将SMTP传输设置为使用localhost:
transport = new Zend_Mail_Transport_Smtp('localhost');
Zend_Mail::setDefaultTransport($transport);
Run Code Online (Sandbox Code Playgroud)
这次我得到了一个不同的错误:"拒绝连接"不确定这意味着什么.也许我还没有提出一些建议呢?
更新:我想我没有安装/设置SMTP服务器.本教程让我很容易让SMTP服务器运行起来.现在上面的两个代码示例都有效.
如何使用Zend_Mail(POP3)获取邮件源(标题,正文,边界 - 所有这些作为纯文本).
它默认返回已解析的部分,我需要原始消息源.
(因为这是我的第一个问题,我只想说,我希望它不是特定于Zend的.据我所知,这应该不是问题.虽然我本可以在特定于Zend的论坛上发布它,但我我觉得我至少有可能在这里得到一个好的答案,特别是因为答案可能涉及超越Zend Framework的MIME相关问题.我基本上试图了解我面临的问题是否应被视为ZF错误,或者如果我误解了某些东西或误用了它.)
我一直在使用Zend_Mail来构建一个通过电子邮件分发服务SendGrid发送的MIME消息.他们的平台允许您通过他们的SMTP服务器发送电子邮件,但是当您使用特殊标头(X-SMTPAPI)时,它会提供附加功能,该标头的值是JSON编码的专有参数字符串,这可能会很长.
最终,我传递的标题太长了(我想> 1000个字符),我得到了错误.我很困惑,因为我知道它是通过PHP的本机wordwrap()函数传递之前我将值传递给Zend_Mail :: addHeader(),所以我认为行长度永远不会是一个问题.
事实证明,addHeader()非常刻意地删除换行符,并且没有通过注释进行特别说明.
// In Zend_Mail::addHeader()
$value = $this->_filterOther($value);
// In Zend_Mail::_filterOther()
$rule = array("\r" => '',
"\n" => '',
"\t" => '',
);
return strtr($data, $rule);
Run Code Online (Sandbox Code Playgroud)
好吧,这一开始似乎很合理 - 也许ZF希望完全控制格式和换行.Zend_Mail :: addHeader()中调用的下一个方法是
$value = $this->_encodeHeader($value);
Run Code Online (Sandbox Code Playgroud)
此方法对值进行编码(根据需要使用quoted-printable或base64)并将其块化为适当长度的行,但仅当它包含"不可打印的字符"时,由Zend_Mime :: isPrintable($ value)确定.
考虑到该方法,换行符(\n)确实被认为是不可打印的字符!因此,如果只是在前一个方法调用中没有将它们从字符串中剥离出来,那么长标题将被编码为QP并被分成72个字符行,并且一切都会正常工作.事实上,我做了一个测试,在那里我注释掉了对_filterOther()的调用,并且长标头被编码并且没有任何问题.但是现在我刚刚对ZF进行了粗心的破解而没有真正理解我删除的那条线背后的目的,所以这不是一个长期的解决方案.
我的中期解决方案是扩展Zend_Mail并创建一个新方法addHeaderForceEncode(),它始终对头的值进行编码,因此总是将其分成短线.但我仍然不满意,因为我不明白为什么首先需要_filterOther()调用 - 也许我根本不应该解决它.
任何人都可以向我解释为什么这种行为存在剥离换行符的问题?如果标题不包含除换行符之外的任何"不可打印的字符",它似乎不可避免地导致标题可能变得太长的情况.
我在这个主题上做了很多不同的搜索,并查看了一些ZF错误报告,但没有看到有人在谈论这个.令人惊讶的是,这似乎是一个非常模糊的问题.仅供参考我正在使用ZF 1.11.11.
更新:如果有人想跟随ZF问题,我打开了这个,这里是:Zend_Mail :: addHeader()解开长标题,然后抛出异常