我用于邮寄表格的 php 脚本不起作用

Posted

技术标签:

【中文标题】我用于邮寄表格的 php 脚本不起作用【英文标题】:My php script for mailing a form is not working 【发布时间】:2013-06-04 03:46:40 【问题描述】:

我正在尝试设置一个表单,将附件与电子邮件内容一起发送,但我不知道我在做什么。

我对 php 完全陌生,刚刚学会了基本的邮件表单工作,基本上是通过反复试验以及互联网上的教程。但是,当涉及到附件时。现在我完全不知所措。而且,虽然 PHP 脚本应该运行,并且文件已上传,但所有操作都会突然停止。我也没有收到应该在脚本完成运行时显示的消息,也没有收到包含测试消息及其附件的电子邮件。

谁能帮助我,或者至少让我了解一下我的错误是什么?我的 html 和 PHP 如下:

HTML(表单和标题)

<h3 style="padding-left:290px">Consulta de orçamento</h3>
<form id="form" method="post" action="formulario_orcamento.php" style="padding-left:100px" enctype="multipart/form-data">
    <fieldset>
        <label><input name="Nome" type="text" value="Nome" id="Nome" onBlur="if(this.value=='') this.value='Nome'" onFocus="if(this.value =='Nome' ) this.value=''"></label>
        <label><input name="E-mail" type="text" value="E-mail" id="E-mail" onBlur="if(this.value=='') this.value='E-mail'" onFocus="if(this.value =='E-mail' ) this.value=''">
        </label>
        <label><input name="Telefone" type="text" value="Telefone" id="Telefone" onBlur="if(this.value=='') this.value='Telefone'" onFocus="if(this.value =='Telefone' ) this.value=''"></label>
        <label>
            <select name="Duvidas" id="Duvidas" style="height:20px; width: 623px">
                <option value="Elaboração de questionários">Elaboração de questionários</option>
                <option value="Amostragem">Amostragem</option>
                <option value="Análise exploratória">Análise exploratória</option>
                <option value="Pesquisas online">Pesquisas online</option>
                <option value="Tabulação">Tabulação</option>
                <option value="Análises específicas">Análises específicas</option>
                <option value="Outras Dúvidas">Outras Dúvidas</option>
            </select>
        </label>
        <label><input name="Outras" type="text" value="Outras Dúvidas - Especificar" id="Outras Duvidas" onBlur="if(this.value=='') this.value='Outras Dúvidas - Especificar'" onFocus="if(this.value =='Outras Dúvidas - Especificar' ) this.value=''"></label>
        <label><input name="Arquivos" type="file" style="height:25px"></label>
        <label><textarea name="Mensagem" id="Mensagem" onBlur="if(this.value=='')this.value='Mensagem'" onFocus="if(this.value=='Mensagem')this.value=''">Mensagem</textarea></label>
        <input type="submit" name="Enviar" id="Enviar" value="Enviar" class="button" style="background:#64d0ff; font-size:14px; color:#fff; display:inline-block; padding:6px 20px 5px 20px; box-shadow:0 1px 1px #fff; width:70px; height:35px" onmouseover="this.style.backgroundColor='#1f497d', this.style.color='#fecf06'" onmouseout="this.style.backgroundColor='#64d0ff', this.style.color='#ffffff'">
    </fieldset>
</form>

PHP

<?php
$name      = $_POST['Nome'];
$email     = $_POST['E-mail'];
$telephone = $_POST['Telefone'];
$message   = $_POST['Mensagem'];

if ($_POST['Duvidas'] = "Outras Dúvidas") 
    $question == $_POST['Outras'];
 else 
    $question == $_POST['Duvidas'];


$mime_boundary = "==Multipart_Boundary_x" . md5(mt_rand()) . "x";
$tmp_name      = $_FILES['filename']['tmp_name'];
$ftype         = $_FILES['filename']['type'];
$fname         = $_FILES['filename']['name'];
$fsize         = $_FILES['filename']['size'];
if (file_exists($tmp_name)) 
    if (is_uploaded_file($tmp_name)) 
        $file = fopen($tmp_name, 'rb');
        $data = fread($file, filesize($tmp_name));
        fclose($file);
        $data = chunk_split(base64_encode($data));
    

    $to      = "quick.analytics@2frame.com.br";
    $subject = "Consulta de orçamento";
    $header  = "From: danielle.steffen@2frame.com.br" . "\r\n";
    $header .= "Content-type: multipart/mixed;\r\n";
    $header .= " boundary=\"$mime_boundary\"";
    $header .= "MIME-Version: 1.0\r\n";

    $msg = "This is a multi-part message in MIME format.\n\n";
    "--$mime_boundary\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
    "Mensagem enviada em " . date("d/m/Y") . ", os dados seguem abaixo:\n\n" . "Nome: $name\n\n" . "E-mail: $email \n\n" . "Telefone: $telephone \n\n" . "Dúvida: $question \n\n";

    $message .= "--$mime_boundary\n";
    "Content-Type: $ftype;\n" . " name=\"$fname\"\n";
    //"Content-Disposition: attachment;\n" .
    //" filename=\"$fileatt_name\"\n" .
    "Content-Transfer-Encoding: base64\n\n";
    $data . "\n\n" . "--$mime_boundary--\n";

    if (isset($_POST['Enviar'])) 
        $res = mail($to, $subject, $msg, $header);
    
    if ($res) 
        echo 'Mensagem enviada para ' . $to . '';
     else 
        echo 'Por favor corrija seus erros.';
    

?>

【问题讨论】:

避免头痛。 phpmailer.worxware.com 请缩进您的代码,以便我们阅读。 还要感谢 Matthew 的缩进。复制到这里后,我没有意识到我已经丢失了所有缩进 【参考方案1】:

您可能有没有看到的 PHP 错误,请尝试将这些行添加到您的 php 顶部:

error_reporting(E_ALL);
ini_set('display_errors', true);

此代码将启用错误报告,这可能会让您看到一些东西..

另外,这一行: if($_POST['Duvidas'] = "Outras Dúvidas")

不是比较$_POST['Duvidas']"Outras Dúvidas",而是将值"Outras Dúvidas" 分配给$_POST['Duvidas'],这始终是正确的。请改用if($_POST['Duvidas'] == "Outras Dúvidas")(注意==)。这可能是您的问题的原因。

【讨论】:

感谢您的提示,Damien,我已经修复了您所建议的内容,并且我已经设法修复了您所建议的脚本添加所报告的错误之一。现在唯一的问题是脚本报告了我不知道它们是什么意思的错误。我得到的消息是第 21-24 行中有未定义的索引。 这意味着您正在使用$arrayVariable['INDEX'] 并且 $arrayVariable 中不存在 INDEX。例如,当您使用 $_POST['formname'] 并且表单不包含带有 name="formname" 的字段时,就会发生这种情况 您的问题很可能是您使用的是$_FILES['filename'],但没有上传文件。 $_FILES 为空,因此索引“文件名”不存在。您可以通过在处理附件的代码周围添加if ( !empty($_FILES)) .. 来解决此问题。 再次感谢 Damien,这实际上很有帮助,我发现问题在于文件没有上传到 $_FILES。我会找到一种方法来真正实现这一点。感谢所有的帮助,达米安!

以上是关于我用于邮寄表格的 php 脚本不起作用的主要内容,如果未能解决你的问题,请参考以下文章

用于发送邮件的 php 脚本在通过浏览器执行时不起作用,但在从命令行执行时工作正常

PHP未设置会话不起作用

使用 PhP 执行一些 python 脚本不起作用

联系表格 PHP 重定向不起作用

PHP 脚本在直接管理员中不起作用,但在 cPanel 中起作用

as3 - 联系表格不起作用