목차
This is the attached HTML file
백엔드 개발 PHP 튜토리얼 用PHP发送有附件的电子邮件_PHP

用PHP发送有附件的电子邮件_PHP

Jun 01, 2016 pm 12:30 PM
콘텐츠 보내다 우리를 문서 이메일 이것 우편 충수

  我经常听到这样一个问题:"我有一个从网站发来的合同。我如何给通过表单发送的电子邮件增加一个附件呢?" 首先我要说的是要做到这个没有什么简单的办法。你要很好的理解PHP或其它的服务器端的脚本语言。当然你还要一个真正支持PHP的网站的账号。如果满足了这个前提,在你读完了本章后就可以用PHP发送带附件的电子邮件了。

  1. 附件是如何工作的

  如果你曾经在PHP的手册中搜索过"附件"函数,那么结果可能是什么都没有(至少在我写本文的时间还没有)。后来你就要花很多时间来了解这方面的知识。你也许会想当你给某个人发送一封带附件的电子邮件时,附件是和邮件一起放到收件人的信箱里的(比如,如果你给他/她发了一个PNG的图片文件,他/她的信箱里会包含一个txt文件(电子邮件)和一个.png文件(附件))。但这不是它的工作原理。当你加入一个附件时,你的邮件程序把附件转换成纯文本文件,并在你写的内容(实际的电子邮件)后面插入这个文本块。这个,当你把所有的东西发出来后,收件人的信箱里只有一个纯文本文件--一个同时包含附件和实际电子邮件内容的文件。

  下面是一个带附件(一个HTML文件)电子邮件的例子。我已经标注了其中重要的几行:

Return-Path:
Date: Thurs, 10 June 2004 8:17:29 +0000
From: Someone
To: Person
Message-id:
Content-type: multipart/mixed; boundary="web"
Subject: Here's the subject

--web
Content-type: text/plain; charset=g2312
Content-transfer-encoding: 8bit

This is the body of the email.

--web
Content-type: text/html; name=attachment.html
Content-disposition: inline; filename=attachment.html
Content-transfer-encoding: 8bit



The attachment


This is the attached HTML file





--396d983d6b89a--

前面的7行是邮件的头,其中值得注意的是Content-type头部分。这个头告诉邮件程序电子邮件是由一个以上的部分组成的。不含附件的邮件只有一个部分:消息本身。带附件的电子通常至少由两部分组成:消息和附件。这样,带两个附件的邮件由三部分组成:消息,第一个附件和第二个附件。

带附件的电子邮件的不同部分之间用分界线来分隔。分界线在Content-type头中定义。邮件的每个新部分以两个连字号(--)和分界线开始。最后一个分界线后也有两个连字号,表示这个邮件中没有其它的部分了。

在每个分界线后有一些行,用来告诉邮件程序这个部分的内容的类型。比如,看看上面例子中第一个分界线后面的两行--以Content-type: text/plain开头的行。这些行说明后面的部分是ISO-8859-1字符集的纯文本。跟在第二个分界线后的行告诉邮件程序现在的部分是一个HTML文件,它的名字是"attachment.html"。



Content-disposition这持告诉邮件程序如果可能就以内嵌的方式显示附件。现在新的邮件程序会在消息后显示HTML的内容。如果Content-disposition被设为attachment,那么邮件程序就不会显示HTML文件的内容,而是显示一个连接到文件的图标(或其它的类似的东西)。收件人要看附件的内容,必须点击这个图标。一般情况下,如果附件是一些文本(包含HTML),Content-disposition会被设为inline,这是因为现在大部分邮件程序能够不借助其它浏览器而直接显示附件(文本)的内容。如果附件不是文本(比如图片或其它类似的内容),Content-disposition就设为attachment。



2. 用PHP生成带附件的电子邮件
这里一个例子,告诉你如果把一个定义好的HTML文件加为邮件的附件:

# 我们首先写实际的消息内容
$emailBody = "This is text that goes into the body of the email.";
# 然后我们要作为附件的HTML文件
$attachment = "


The attached file


This is the attached HTML file



";



# 建立在邮件中分隔不同部分的分界线。
# 基本上,分界线可以是任意的字符串。
# 但是重要的一点是确定一个写邮件的人
# 这会随意写出的字符串,所以我们用
# uniqid函数来产生一个随机的字符串。
$boundary = uniqid( "");



# 现在我们要建立邮件头。不要忘了插入
# Content-type头来说明这个邮件包含一个或更多的附件。
$headers = "From: someone@example.com
Content-type: multipart/mixed; boundary=\"$boundary\"";



# 好,现在我们已经有了邮件的所有内容。
# 下一件事是修改邮件的主体。
$emailBody = "--$boundary
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit



$emailBody



--$boundary
Content-type: text/html; name=attachment.html
Content-disposition: inline; filename=attachment.html
Content-transfer-encoding: 8bit



$attachment
--$boundary--";



# 现在可以把邮件发出去了
mail( "person@eksempel.dk", "The subject", $emailBody, $headers);
?>

3. 把用户上传的文件作为附件



你也许会觉得上面的例子难以理解,但下面...。在下面的例子中事情更难了,因为我们要用一个表单让用户上传他们的文件,并把这个文件作为我们要发的邮件的附件。麻烦的是我们不能预先知道文件的MIME类型。在前面的例子中,我们已经知道该它是一个HTML文件,所以给这个附件设置Content-type头是很简单的。在下面的例子中,MIME类型可能是任意的,因为用户可能会上传一个HTML文件,一个PNG文件,一个vCard文件,或者其它的东西。让我们来看看例子:



# 现在我们来生成表单。在产生可以上传文件的表单时,
# 不要忘了把
标签的"enctype"属性设为"multipart/form-data".
echo "
\n";
echo "
\n";
echo "
\n";
echo "
\n";
echo "
\n";
echo "
\n";
echo "\n";
echo "
\n";



# 如果用户已经按了"Send"按钮"
if ($send) {
# 定义分界线
$boundary = uniqid( "");



# 生成邮件头
$headers = "From: $from
Content-type: multipart/mixed; boundary=\"$boundary\"";



# 确定上传文件的MIME类型
if ($attachment_type) $mimeType = $attachment_type;
# 如果浏览器没有指定文件的MIME类型,
# 我们可以把它设为"application/unknown".
else $mimeType = "application/unknown";



# 确定文件的名字
$fileName = $attachment_name;



# 打开文件
$fp = fopen($attachment, "r");
# 把整个文件读入一个变量
$read = fread($fp, filesize($attachment));



# 好,现在变量$read中保存的是包含整个文件内容的文本块。
# 现在我们要把这个文本块转换成邮件程序可以读懂的格式
# 我们用base64方法把它编码
$read = base64_encode($read);



# 现在我们有一个用base64方法编码的长字符串。
# 下一件事是要把这个长字符串切成由每行76个字符组成的小块
$read = chunk_split($read);



# 现在我们可以建立邮件的主体
$body = "--$boundary
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit



$body



--$boundary
Content-type: $mimeType; name=$fileName
Content-disposition: attachment; filename=$fileName
Content-transfer-encoding: base64



$read
--$boundary--";
# 发送邮件
mail($to, $subject, $body, $headers);
}
?>

这就是全部内容。如果你不能很好地理解上面的例子,我的建议是给你自己发送几个带附件的邮件,然后仔细研究邮件的源代码。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 11의 제어판에서 Outlook 이메일이 손실됨 Windows 11의 제어판에서 Outlook 이메일이 손실됨 Feb 29, 2024 pm 03:16 PM

Windows 11 제어판에 Outlook 메일 아이콘이 없나요? 이러한 예상치 못한 상황은 통신 요구를 위해 OutlookMail을 사용하는 일부 개인들 사이에 혼란과 우려를 불러일으켰습니다. 내 Outlook 이메일이 제어판에 표시되지 않는 이유는 무엇입니까? 제어판에 Outlook 메일 아이콘이 없는 데에는 여러 가지 이유가 있을 수 있습니다. Outlook이 올바르게 설치되지 않았습니다. Microsoft Store에서 Office 응용 프로그램을 설치해도 메일 애플릿이 제어판에 추가되지 않습니다. 제어판에 mlcfg32.cpl 파일 위치가 없습니다. 레지스트리의 mlcfg32.cpl 파일 경로가 올바르지 않습니다. 현재 운영 체제가 이 애플리케이션을 실행하도록 구성되어 있지 않습니다.

0x80004005 오류 코드가 나타나는 경우 수행할 작업 편집기에서 0x80004005 오류 코드를 해결하는 방법을 알려줍니다. 0x80004005 오류 코드가 나타나는 경우 수행할 작업 편집기에서 0x80004005 오류 코드를 해결하는 방법을 알려줍니다. Mar 21, 2024 pm 09:17 PM

컴퓨터에서 폴더를 삭제하거나 압축을 풀 때 "오류 0x80004005: 지정되지 않은 오류"라는 프롬프트 대화 상자가 나타나는 경우가 있습니다. 이러한 상황이 발생하면 어떻게 해야 합니까? 실제로 오류 코드 0x80004005가 나타나는 데에는 여러 가지 이유가 있지만 대부분은 바이러스로 인해 발생합니다. 문제를 해결하기 위해 dll을 다시 등록할 수 있습니다. 아래에서는 편집기에서 0x80004005 오류 코드를 처리한 경험을 설명합니다. . 일부 사용자는 컴퓨터를 사용할 때 오류 코드 0X80004005가 표시됩니다. 0x80004005 오류는 주로 컴퓨터가 특정 동적 링크 라이브러리 파일을 올바르게 등록하지 않거나 컴퓨터와 인터넷 간의 HTTPS 연결을 허용하지 않는 방화벽으로 인해 발생합니다. 그렇다면 어떨까요?

Quark Cloud Disk에서 Baidu Cloud Disk로 파일을 전송하는 방법은 무엇입니까? Quark Cloud Disk에서 Baidu Cloud Disk로 파일을 전송하는 방법은 무엇입니까? Mar 14, 2024 pm 02:07 PM

Quark Netdisk와 Baidu Netdisk는 현재 파일 저장에 가장 일반적으로 사용되는 Netdisk 소프트웨어입니다. Quark Netdisk의 파일을 Baidu Netdisk에 저장하려면 어떻게 해야 합니까? 이번 호에서는 편집자가 Quark Network Disk 컴퓨터에서 Baidu Network Disk로 파일을 전송하는 방법에 대한 튜토리얼 단계를 정리했습니다. Quark 네트워크 디스크 파일을 Baidu 네트워크 디스크에 저장하는 방법은 무엇입니까? Quark Network Disk에서 Baidu Network Disk로 파일을 전송하려면 먼저 Quark Network Disk에서 필요한 파일을 다운로드한 다음 Baidu Network Disk 클라이언트에서 대상 폴더를 선택하고 열어야 합니다. 그런 다음 Quark Cloud Disk에서 다운로드한 파일을 Baidu Cloud Disk 클라이언트가 연 폴더에 끌어서 놓거나 업로드 기능을 사용하여 Baidu Cloud Disk에 파일을 추가합니다. 업로드가 완료된 후 파일이 Baidu Cloud Disk에 성공적으로 전송되었는지 확인하세요. 그게 다야

hiberfil.sys 파일이란 무엇입니까? hiberfil.sys를 삭제할 수 있나요? hiberfil.sys 파일이란 무엇입니까? hiberfil.sys를 삭제할 수 있나요? Mar 15, 2024 am 09:49 AM

최근 많은 네티즌들이 편집자에게 hiberfil.sys 파일이 무엇인지 문의했습니다. hiberfil.sys가 C 드라이브 공간을 많이 차지하고 삭제될 수 있나요? 편집자는 hiberfil.sys 파일을 삭제할 수 있음을 알려줄 수 있습니다. 아래에서 자세한 내용을 살펴보겠습니다. hiberfil.sys는 Windows 시스템의 숨겨진 파일이자 시스템 최대 절전 모드 파일입니다. 일반적으로 C 드라이브의 루트 디렉터리에 저장되며 크기는 시스템에 설치된 메모리 크기와 동일합니다. 이 파일은 컴퓨터가 최대 절전 모드일 때 사용되며, 복구 시 빠르게 이전 상태로 복원할 수 있도록 현재 시스템의 메모리 데이터를 담고 있습니다. 크기가 메모리 용량과 동일하므로 하드 드라이브 공간을 더 많이 차지할 수 있습니다. 동면

360 탐색으로 열리도록 Microsoft Edge 브라우저를 변경하는 방법 - 360 탐색으로 열기를 변경하는 방법 360 탐색으로 열리도록 Microsoft Edge 브라우저를 변경하는 방법 - 360 탐색으로 열기를 변경하는 방법 Mar 04, 2024 pm 01:50 PM

Microsoft Edge 브라우저에서 360 탐색 페이지를 여는 페이지를 변경하는 방법은 실제로 매우 간단하므로 이제 Microsoft Edge에서 360 탐색 페이지를 여는 페이지를 변경하는 방법을 공유하겠습니다. 브라우저가 필요한 친구가 모두를 도울 수 있기를 바랍니다. Microsoft Edge 브라우저를 엽니다. 아래와 같은 페이지가 보입니다. 오른쪽 상단에 있는 점 3개 아이콘을 클릭하세요. '설정'을 클릭하세요. 설정 페이지의 왼쪽 열에서 "시작 시"를 클릭하세요. 오른쪽 열의 그림에 표시된 세 지점을 클릭한 다음("새 탭 열기"를 클릭하지 마세요), 편집을 클릭하고 URL을 "0"(또는 기타 의미 없는 숫자)으로 변경하세요. 그런 다음 "저장"을 클릭하세요. 다음으로 '를 선택하세요.

파일 경로에서 슬래시와 백슬래시의 다양한 용도 파일 경로에서 슬래시와 백슬래시의 다양한 용도 Feb 26, 2024 pm 04:36 PM

파일 경로는 운영 체제에서 파일이나 폴더를 식별하고 찾는 데 사용되는 문자열입니다. 파일 경로에는 경로를 구분하는 두 가지 공통 기호, 즉 슬래시(/)와 백슬래시()가 있습니다. 이 두 기호는 운영 체제에 따라 용도와 의미가 다릅니다. 슬래시(/)는 Unix 및 Linux 시스템에서 일반적으로 사용되는 경로 구분 기호입니다. 이러한 시스템에서 파일 경로는 루트 디렉터리(/)에서 시작하고 각 디렉터리 사이를 슬래시로 구분합니다. 예를 들어 /home/user/Docume 경로는 다음과 같습니다.

TikTok에서 다른 사람에게 파일을 보내는 방법은 무엇입니까? 다른 사람에게 보낸 파일을 삭제하는 방법은 무엇입니까? TikTok에서 다른 사람에게 파일을 보내는 방법은 무엇입니까? 다른 사람에게 보낸 파일을 삭제하는 방법은 무엇입니까? Mar 22, 2024 am 08:30 AM

Douyin에서 사용자는 자신의 삶의 세부 사항과 재능을 공유할 수 있을 뿐만 아니라 다른 사용자와 상호 작용할 수도 있습니다. 이 과정에서 사진, 동영상 등의 파일을 다른 사용자에게 전송해야 하는 경우가 있습니다. 그렇다면 Douyin에서 다른 사람에게 파일을 보내는 방법은 무엇입니까? 1. Douyin에서 다른 사람에게 파일을 보내는 방법은 무엇입니까? 1. Douyin을 열고 파일을 보내려는 채팅 인터페이스로 들어갑니다. 2. 채팅 인터페이스에서 "+" 기호를 클릭하고 "파일"을 선택합니다. 3. 파일 옵션에서 사진, 비디오, 오디오 및 기타 파일을 보내도록 선택할 수 있습니다. 보내려는 파일을 선택한 후 "보내기"를 클릭하세요. 4. 상대방이 파일을 수락할 때까지 기다리세요. 상대방이 파일을 수락하면 파일이 성공적으로 전송됩니다. 2. Douyin에서 다른 사람에게 보낸 파일을 삭제하는 방법은 무엇입니까? 1. Douyin을 열고 보낸 문자를 입력하세요.

MySQL에서 .ibd 파일의 역할과 관련 주의사항에 대한 자세한 설명 MySQL에서 .ibd 파일의 역할과 관련 주의사항에 대한 자세한 설명 Mar 15, 2024 am 08:00 AM

MySQL에서 .ibd 파일의 역할 및 관련 주의사항에 대한 자세한 설명 MySQL은 널리 사용되는 관계형 데이터베이스 관리 시스템이며 데이터베이스의 데이터는 서로 다른 파일에 저장됩니다. 그 중 .ibd 파일은 InnoDB 스토리지 엔진의 데이터 파일로, 테이블에 데이터와 인덱스를 저장하는 데 사용됩니다. 이 기사에서는 MySQL에서 .ibd 파일의 역할에 대한 자세한 분석을 제공하고 관련 코드 예제를 제공하여 독자의 이해를 돕습니다. 1. .ibd 파일의 역할: 데이터 저장: .ibd 파일은 InnoDB 저장소입니다.

See all articles