编辑 在盯着文档再过一小时后,我想我终于意识到我需要调整的内容以及如何调整。我明天会更新这个问题( * EDIT2 * 25日,今天必须照顾我的家人。但我已经完成了大部分功能;),很有可能完全解决了我的问题。问题;)
我知道我要求很多,但我认为把所有东西放在一个地方而不是开始多个问题会更好。我正在尝试将此tutorial实施到我的CI项目中。在邮件确认部分之前一切都很好。在教程中他们使用Swift Mailer,但我想坚持使用CI的邮件助手。
问题在于代码有点复杂,因为使用了模板和确认链接本身。我的代码的当前状态如下,以及每个部分的简短摘要。我不是要求你立即回答所有问题,只是给我一些指示,我会慢慢实施它们,并希望在本周末我们能够开始工作。
HTML模板 * mamp / htdocs / assets / templates / signup_template.html *
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body style="margin: 0; padding: 0;">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
Hello {USERNAME}, please click on the link below to finish the registration process
</td>
</tr>
<td>
Link: {SITEPATH}{KEY}
</td>
<tr>
<td>
</td>
</tr>
</table>
</body>
</html>
我认为HTML模板应该是这样的?我认为站点路径应该是这样的base_url('controller/method/')
,以便密钥作为参数发送到我的函数,完成注册。
TXT模板 * mamp / htdocs / assets / templates / signup_template.txt *
//I have 0 clue how this file should look like
但是当接收者的电子邮件客户端不支持HTML电子邮件时,将使用ts。
控制器
$info = array(
'name' => $name,
'email' => $email,
'confkey' => $confkey
);
if ($this->User_m->sendMail($info) == 'error') {
//error reporting
$data['msg'] = "Something wen't wrong";
$this->load->view('registration_v',$data);
} else {
$this->load->view('success_v');
}
我明白了。 :D $info
包含名称&amp;来自我的表单的电子邮件输入,$confkey
保存我用于验证的唯一密钥。然后发送电子邮件,如果有错误报告,或者我加载了success_v
视图。
模型
private function format_email($info, $format){
//set the root
$root = base_url() . 'assets/templates/; //Modified for CI
//I am not sure if I can just keep this code or should also modify it
//grab the template content
$template = file_get_contents($root.'/signup_template.'.$format);
//replace all the tags
$template = ereg_replace('{USERNAME}', $info['name'], $template);
$template = ereg_replace('{KEY}', $info['confkey'], $template);
$template = ereg_replace('{SITEPATH}','http://site-path.com', $template);
//return the html of the template
return $template;
}
从sendMail
函数中调用此函数,以生成实际电子邮件的两个实体。该函数查找模板并将{}
内的值替换为参数中提供的值。问题是我不知道替换部分是否适用于CI。
public function sendMail($info){
//loading the CI's mail helper
$ci = get_instance();
$ci->load->helper('mail');
//format each email
$body = this->format_email($info,'html'); //Modified for CI
$body_plain_txt = this->format_email($info,'txt'); //Modified for CI
//setup the mailer
//This is what I need to rewrite for CI's mail helper
$transport = Swift_MailTransport::newInstance();
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance();
$message ->setSubject('Welcome to Site Name');
$message ->setFrom(array('noreply@sitename.com<script type="text/javascript">
/* <![CDATA[ */
(function(){try{var s,a,i,j,r,c,l,b=document.getElementsByTagName("script");l=b[b.length-1].previousSibling;a=l.getAttribute('data-cfemail');if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
</script>' => 'Site Name'));
$message ->setTo(array($info['email'] => $info['username']));
$message ->setBody($body_plain_txt);
$message ->addPart($body, 'text/html');
$result = $mailer->send($message);
return $result;
}
最后实际发送电子邮件的功能。我试图将我认为理解的内容重写为CI的语法,但实际的电子邮件创建没有受到影响。如果你能告诉我如何将这个函数重写为CI的邮件助手语法,那就太棒了。
感谢大家阅读和回复。如果您需要任何其他信息,请直接询问。还有,圣诞快乐!
答案 0 :(得分:0)
休息一下,开始阅读此页面:http://ellislab.com/codeigniter/user-guide/libraries/email.html
使用codeigniter发送电子邮件非常简单,您的控制器可能看起来像这样
public function sendEmail() {
$this->load->library('email');
$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');
$this->email->cc('another@another-example.com');
$this->email->bcc('them@their-example.com');
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');
$this->email->send();
}
然后,如果您想要替换视图上的值,请使用$ data将数据解析为视图,如您在此处所做的那样:
$data['msg'] = "Something wen't wrong";
$this->load->view('registration_v',$data);
在这个例子中,只需在registration_v上回显$ msg - 您可以将其输入电子邮件地址或其他值。
希望这会对你有帮助。