当前位置: 首页 > 知识库问答 >
问题:

无法将附件发送到电子邮件[重复]

张锐藻
2023-03-14

我试图发送附加文件到电子邮件。但是我无法将附件文件连同表格数据发送到电子邮件。我试过了

超文本标记语言:

        <form action="sendmail.php" method="post" name="form1" enctype="multipart/form-data">
    <table width="343" border="1">
        <tr>
        <td>Name</td>
        <td><input name="name" type="text" id="name"></td> 
    </tr> 
    <tr>
        <td>City</td>
        <td><input name="city" type="text" id="city"></td>
    </tr>
    <tr>
        <td>Descibe Yourself</td>
        <td><textarea name="description" cols="30" rows="4" id="description"></textarea></td>
    </tr>
    <tr>
        <td>Mobile Number</td>
        <td><input name="mobile" id="mobile"type="text"></td>
    </tr>
    <tr>
    <tr>
        <td>Email</td>
        <td><input name="email" type="email" id="email"></td>
    </tr>
    <tr>
      <td>Attach Your Image</td>
      <td><input name="fileAttach" type="file"></td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td><input type="submit" name="Submit" value="Send"></td>
    </tr>
    </table>
    </form>

sendmail.php:

    <?
    $name = $_POST['name'];
    $city = $_POST['city'];
    $description = $_POST['description'];
    $mobile = $_POST['mobile'];
    $email = $_POST['email'];

    if ($name == '' || $city == '' || $description==''|| $mobile=='' || $email=='')
                    {
                echo "<script> alert('Fill all fields, try again!');
                window.location='contact.html'</script>";
                exit;
                }


    $ToEmail = 'info@mywebsite.com'; 
    $EmailSubject = 'Website contact form'; 
    $mailheader = "From: ".$_POST["email"]."\r\n"; 
    $mailheader .= "Reply-To: ".$_POST["email"]."\r\n"; 
    $mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
    $MESSAGE_BODY = "Name: ".$_POST["name"]."<br><br>"; 
    $MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>"; 
    $MESSAGE_BODY .= "Description: ".$_POST["description"]."<br>"; 
    $MESSAGE_BODY .= "Mobile: ".nl2br($_POST["mobile"])."<br>";
    $MESSAGE_BODY .= "City: ".nl2br($_POST["city"])."<br>";


    //*** Attachment ***//
    if($_FILES["fileAttach"]["name"] != "")
    {
        $strFilesName = $_FILES["fileAttach"]["name"];
        $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
        $strHeader .= "--".$strSid."\n";
        $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
        $strHeader .= "Content-Transfer-Encoding: base64\n";
        $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
        $strHeader .= $strContent."\n\n";
    }


     mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader, $strHeader) or die ("Failure");
    echo "<script> alert('Messgae successfully sent!');
    window.location='index.html'</script>";
       exit; 



    if($mail)
    {
        echo "<script> alert('Messgae successfully sent!');
    window.location='index.html'</script>";
    }
    else
    {
        echo "<script> alert('Temporary problem, try again!');</script>";
    }
?>

我尝试了相同的代码没有$strHeader在mail()邮件被发送,但当我添加$strHeader到mail()我无法发送代码。请指导我在哪里做错误,也请告诉我如何才能只允许jpg,jpeg,png格式上传。对我来说,编辑代码对我来说很容易学习。我在stackoverflow上查了很多答案,但没有找到答案。

共有2个答案

太叔睿
2023-03-14

试着用\r\n代替\n...

$strHeader .= "--".$strSid."\r\n";
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\r\n"; 
$strHeader .= "Content-Transfer-Encoding: base64\r\n";
$strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\r\n\r\n";
$strHeader .= $strContent."\r\n\r\n";

更改:

$mailheader = "From: ".$_POST["email"]."\r\n"; 
$mailheader .= "Reply-To: ".$_POST["email"]."\r\n"; 
$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
$MESSAGE_BODY = "Name: ".$_POST["name"]."<br><br>"; 
$MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>"; 
$MESSAGE_BODY .= "Description: ".$_POST["description"]."<br>"; 
$MESSAGE_BODY .= "Mobile: ".nl2br($_POST["mobile"])."<br>";
$MESSAGE_BODY .= "City: ".nl2br($_POST["city"])."<br>";

与:

$hash   = md5(date('r', time()));
$mailheader = "From: {$_POST["email"]}\r\n"; 
$mailheader .= "Reply-To: {$_POST["email"]}\r\n"; 
$mailheader .= "Content-type: text/html; boundary=\"PHP-mixed-$hash\""; 
$MESSAGE_BODY = "Name: {$_POST["name"]}<br><br>"; 
$MESSAGE_BODY .= "Email: {$_POST["email"]}<br>"; 
$MESSAGE_BODY .= "Description: {$_POST["description"]}<br>"; 
$MESSAGE_BODY .= "Mobile: ".nl2br($_POST["mobile"])."<br>";
$MESSAGE_BODY .= "City: ".nl2br($_POST["city"])."<br>";

改变

$strFilesName = $_FILES["fileAttach"]["name"];
$strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
$strHeader .= "Content-Transfer-Encoding: base64\n";
$strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
$strHeader .= $strContent."\n\n";

具有

$strFilesName = $_FILES["fileAttach"]["name"];
$strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
$MESSAGE_BODY .= "--PHP-mixed-$hash\r\n";
$MESSAGE_BODY .= "Content-Type: application/octet-stream; name=\"$strFilesName\"\r\n";
$MESSAGE_BODY .= "Content-Transfer-Encoding: base64\r\n";
$MESSAGE_BODY .= "Content-Disposition: attachment; filename=\"$strFilesName\"\r\n\r\n";
$MESSAGE_BODY .= $strContent."\r\n";
$MESSAGE_BODY .= "--PHP-mixed-$hash--";

你错过了边界。

齐建安
2023-03-14

这一点已经得到了回答。查看不将图像文件发送到电子邮件的表单,以及发送带有附件的电子邮件的我的评论。

 类似资料:
  • 问题内容: 我正在使用sendgrid发送电子邮件,并且使用以下代码可以正常工作,但没有附件。 但是我需要发送附件,因此我搜索了github源和Web文档API,由于某种原因,没有javadocs,但是有一个示例GitHub sendgrid, 所以我一直在尝试直到它起作用为止,我缩小了一些异常和响应代码,起初我是被禁止的未经授权,最好是响应202,表示有效且已排队(在此处检查),这是我的代码发送

  • 我的: 但是邮件不会发送到该地址,在控制台中,当我单击时,正在打印,但它不会发送任何电子邮件。 我用的是Django 1.3.7和Python 2.6。 不知道是版本的问题还是什么逻辑问题。

  • 问题内容: 我在理解如何使用Python通过电子邮件发送附件时遇到问题。我已成功通过电子邮件将简单消息通过电子邮件发送。有人可以在电子邮件中说明如何发送附件。我知道在线上还有其他帖子,但是作为Python初学者,我很难理解它们。 问题答案: 这是另一个:

  • 我正在尝试使用CodeIgniter的电子邮件库发送电子邮件。这是我写的代码。 错误:这是我得到的错误。 遇到以下SMTP错误:0php_network_getaddresses:getaddrinfo失败:名称或服务未知无法发送数据:AUTH LOGIN发送AUTH LOGIN命令失败。错误:无法发送数据:邮件从:从:遇到以下SMTP错误:无法发送数据:RCPT TO:到:遇到以下SMTP错误:

  • 问题内容: 我似乎找不到我编写的应该发送带有附件的电子邮件的php函数的问题。我已经为此苦苦挣扎了一段时间了。 编辑 问题是邮件的消息与文件混合在一起并作为附件发送。 问题答案: Artefacto让我更加关注输出,并且找到了解决方法:

  • 问题内容: 我正在尝试在带有附件的codeigniter上发送电子邮件。 我总是成功收到电子邮件。但是,我从未收到带有附件的文件。以下是代码,非常感谢所有评论。 问题答案: $ this- >电子邮件-> attach() 使您可以发送附件。将文件路径/名称放在第一个参数中。注意:使用文件路径,而不是URL。对于多个附件,请多次使用该功能。例如: