如何使用magento在索引控制器中编写动作来发送电子邮件?
我的索引控制器;
public function postAction()
{
$post = $this->getRequest()->getPost();
if(!$post) exit;
$translate = Mage::getSingleton('core/translate');
$translate->setTranslateInline(false);
try {
$postObject = new Varien_Object();
$postObject->setData($post);
if (!Zend_Validate::is(trim($post['email']), 'EmailAddress')) {
echo '<div class="error-msg">'.Mage::helper('contacts')->__('Please enter a valid email address. For example johndoe@domain.com.').'</div>';
exit;
}
$storeId = Mage::app()->getStore()->getStoreId();
$emailId = Mage::getStoreConfig(self::XML_PATH_SAMPLE_EMAIL_TEMPLATE);
$mailTemplate = Mage::getModel('core/email_template');
$mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$storeId))
->setReplyTo($post['email'])
->sendTransactional($templateId, $sender, $email, $name, $vars=array(), $storeId=null)
if (!$mailTemplate->getSentSuccess()) {
echo '<div class="error-msg">'.Mage::helper('contacts')->__('Unable to submit your request. Please, try again later.').'</div>';
exit;
}
$translate->setTranslateInline(true);
echo '<div class="success-msg">'.Mage::helper('contacts')->__('Your inquiry was submitted and will be responded to as soon as possible. Thank you for contacting us.').'</div>';
}
catch (Exception $e) {
$translate->setTranslateInline(true);
echo '<div class="error-msg">'.Mage::helper('contacts')->__('Unable to submit your request. Please, try again later.').$e.'</div>';
exit;
}
}
有什么不对.. 请帮我解决这个问题.. 提前谢谢..
答案 0 :(得分:31)
如果您不需要模板,这是另一种方式。 从控制器呼叫。
<?php
$body = "Hi there, here is some plaintext body content";
$mail = Mage::getModel('core/email');
$mail->setToName('John Customer');
$mail->setToEmail('customer@email.com');
$mail->setBody($body);
$mail->setSubject('The Subject');
$mail->setFromEmail('yourstore@url.com');
$mail->setFromName("Your Name");
$mail->setType('text');// You can use 'html' or 'text'
try {
$mail->send();
Mage::getSingleton('core/session')->addSuccess('Your request has been sent');
$this->_redirect('');
}
catch (Exception $e) {
Mage::getSingleton('core/session')->addError('Unable to send.');
$this->_redirect('');
}
答案 1 :(得分:5)
看起来调用sendTransactional()的方式存在一些问题。首先,$ templateId未定义,看起来您实际上已将模板ID存储在$ emailId中。此外,$ sender,$ email和$ name未定义。你可以尝试这样的事情:
->sendTransactional($emailId, 'general', $post['email'], "Need a send to name here")
只有在从getStoreConfig()调用中获得有效的模板ID时,才会起作用。您还需要正确设置姓氏参数。
可能还有其他问题,但无论如何,这都是我注意到的。
答案 2 :(得分:3)
最后,我创建了一个使用zend
发送邮件的功能public function sendMail() { $post = $this->getRequest()->getPost(); if ($post){ $random=rand(1234,2343); $to_email = $this->getRequest()->getParam("email"); $to_name = 'Hello User'; $subject = ' Test Mail- CS'; $Body="Test Mail Code : "; $sender_email = "sender@sender.com"; $sender_name = "sender name"; $mail = new Zend_Mail(); //class for mail $mail->setBodyHtml($Body); //for sending message containing html code $mail->setFrom($sender_email, $sender_name); $mail->addTo($to_email, $to_name); //$mail->addCc($cc, $ccname); //can set cc //$mail->addBCc($bcc, $bccname); //can set bcc $mail->setSubject($subject); $msg =''; try { if($mail->send()) { $msg = true; } } catch(Exception $ex) { $msg = false; //die("Error sending mail to $to,$error_msg"); } $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($msg)); } }