【发布时间】:2014-04-08 10:31:20
【问题描述】:
因此,我被要求创建一个表单,一旦填写完毕,就会向我的客户发送一封包含表单条目的电子邮件,其中必须包含一个包含数据的 .csv 文件附件。
最初我通过将其硬编码到一个普通页面来测试它。
<form class="main-form" method="post">
<ul>
<li><div>Email: </div><input type="email" name="email" size="20" /></li>
<br />
<input type="submit">
</ul>
</form>
<?php
$email=$_REQUEST['email'];
if ($email =="") {
//Do nothing
} else {
$to = "mail@test.co.uk";
$from = "test";
$subject = "test";
//Message Body
$text = "test";
//The Attachment
$cr = "\n";
$data = "Email"
$data .= "$email". $cr;
$fp = fopen('test.csv','a');
fwrite($fp,$data);
fclose($fp);
$attachments[] = Array(
'data' => $data,
'name' => 'diploma_apprenticeship_form_sub.csv',
'type' => 'application/vnd.ms-excel'
);
//Generate a boundary string
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
//Add the headers for a file attachment
$headers = "MIME-Version: 1.0\n" .
"From: BRS\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
//Add a multipart boundary above the plain message
$message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/html; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$text . "\n\n";
//Add attachments
foreach($attachments as $attachment){
$data = chunk_split(base64_encode($attachment['data']));
$name = $attachment['name'];
$type = $attachment['type'];
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$type};\n" .
" name=\"{$name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" ;
}
$message .= "--{$mime_boundary}--\n";
mail($to, $subject, $message, $headers);
}
?>
这可以正常工作,并且可以完全按照我的意愿通过电子邮件发送附件。但是,他们现在希望将其作为简码,以便他们可以将其发布到他们的 wordpress 构建中的任何位置。所以我添加了短代码并将代码发布到一个 php 函数中,当 wordpress 检测到 [form] 时调用该函数。但是现在不行了。
function main_form() {
return <<<HTML
<form class="main-form" method="post">
<ul>
<li><div>Email: </div><input type="email" name="email" size="20" /></li>
<br />
<input type="submit">
</ul>
</form>
HTML;
// Then rest of php as it was above
}
表单输出正常,但我不再收到电子邮件。最初我认为$_REQUEST[]; 没有获取数据,但我将 $email 设置为固定字符串,但它仍然不起作用。
有人有什么想法吗?
【问题讨论】: