php读取本地文件并发送邮件有五种方法:一、用mail()函数配合file_get_contents;二、用phpmailer支持smtp认证;三、用swift mailer构建mime;四、用fopen流式读取大文件;五、将文件作base64编码附件发送。

如果您需要使用PHP读取本地文件内容,并将该内容作为邮件正文发送,则需确保服务器支持mail函数或已配置SMTP扩展。以下是实现此功能的多种方法:
一、使用内置mail()函数读取文件并发送
该方法依赖系统自带的sendmail服务或本地MTA配置,适用于Linux环境且无需额外扩展。它通过file_get_contents读取文件,再调用mail()发送纯文本邮件。
1、确认目标文件路径存在且PHP进程具有读取权限,例如:/var/www/data/report.txt。
2、使用file_get_contents读取文件全部内容,并赋值给变量$body。
立即学习“PHP免费学习笔记(深入)”;
3、设置邮件头信息,包括From、Content-Type和Charset,确保中文不乱码。
4、调用mail()函数,传入收件人地址、邮件主题、文件内容$body及邮件头变量$headers。
二、使用PHPMailer库读取文件并发送
PHPMailer提供更可靠的SMTP认证与HTML邮件支持,适合需要登录邮箱服务器(如Gmail、QQ邮箱)的场景。它能自动处理附件、编码和错误反馈。
1、通过Composer安装PHPMailer:composer require phpmailer/phpmailer。
2、引入PHPMailer类文件,创建PHPMailer实例并启用异常抛出模式。
3、配置SMTP主机、端口、用户名、密码及是否启用TLS/SSL加密。
4、使用file_get_contents读取指定路径的文件内容,设为邮件正文Body。
5、调用isHTML(false)设置为纯文本模式,或isHTML(true)配合mb_convert_encoding处理UTF-8中文。
三、使用Swift Mailer读取文件并发送
Swift Mailer是另一个轻量级邮件发送组件,支持流式内容加载与灵活的MIME构造。其消息对象可直接接受文件句柄或字符串内容,适合大文件分段读取场景。
1、通过Composer安装:composer require swiftmailer/swiftmailer。
2、创建Transport对象,配置SMTP参数(host、port、username、password、encryption)。
3、初始化Mailer实例,并构建Message对象。
4、调用file_get_contents获取文件内容,使用setBody()方法注入正文。
5、设置收件人、发件人、主题等基础字段后,执行send()触发投递。
四、使用fopen逐行读取大文件并拼接发送
当待发送文件体积较大(如超过2MB),直接使用file_get_contents可能导致内存溢出。此方法采用流式读取,逐行载入并累积至缓冲区,控制内存占用。
1、使用fopen以只读方式打开文件,检查返回资源是否为有效句柄。
2、初始化空字符串$buffer,循环调用fgets读取每行内容并追加到$buffer。
3、每次追加后检查strlen($buffer)是否超出预设阈值(如1.5MB),超限则截断并记录警告。
4、关闭文件指针,将$buffer作为邮件正文传入选定的邮件发送函数。
5、在邮件头中添加X-File-Read-Mode: stream标识该邮件基于流式读取生成。
五、读取文件并作为邮件附件发送
某些业务要求将原始文件原样作为附件发送,而非仅发送内容。此时需构造MIME多部分结构,将文件二进制数据Base64编码后嵌入邮件体。
1、使用file_get_contents读取文件原始字节,并用base64_encode转换为ASCII字符串。
2、生成唯一边界字符串(boundary),用于分割邮件各部分。
3、构建邮件头,包含MIME-Version、Content-Type: multipart/mixed及对应boundary声明。
4、拼接邮件主体:第一部分为纯文本正文(可含文件名与简要说明),第二部分为application/octet-stream类型的附件块。
5、在附件块中写入Content-Disposition: attachment; filename="original_file.txt"及编码后的内容。











