PHP mail()函数:使用python或php脚本替换sendmail以支持SMTP

时间:2017-03-31 13:12:43

标签: php python email smtp sendmail

似乎默认的php mail()函数不容易配置,它只是调用操作系统配置的sendmail函数来发送电子邮件。

虽然安装替代sendmail可以解决问题,但是配置这样的程序还取决于操作系统及其自身版本,难以控制。

所以我想如果有办法编写python或php的轻量级脚本,并将其作为可执行文件,那么替换php.ini中的sendmail路径

; For Unix only.  You may supply arguments as well (default: "sendmail -t -
; http://php.net/sendmail-path
sendmail_path = /some/script/pymail.py

它支持在其上设置任何SMTP帐户。

使用python发送邮件并不困难,但有没有办法使输入参数适应相同或与sendmail命令兼容?

这种方法是否可能或有一些现有的工作?

2 个答案:

答案 0 :(得分:0)

最后找到了一些图书馆来完成这项工作。

https://github.com/chupikov/sendmail.py

维基:https://github.com/chupikov/sendmail.py/wiki

最终配置术语如下所示:

sendmail_path = /home/user/bin/sendmail.py/sendmail.py -c /home/user/bin/sendmail.py/php-apache2.json

答案 1 :(得分:0)

我自己也制作了一个简单的脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import smtplib
from sys import stdin
from email.mime.text import MIMEText
import email

s = smtplib.SMTP_SSL('smtp.mydomain.com:465')
s.login('myaccount@mydomain.com','my_password')
mail = email.message_from_string(stdin.read())
s.sendmail(
    mail['from'] or 'myaccount@mydomain.com', 
    mail['to'] or mail['bcc'], 
    mail.as_string()
)
s.quit()

将上述脚本放入/usr/sbin/sendmailwhich sendmail的实际位置,将其设为可执行chmod +x /usr/sbin/sendmail然后测试:

<?php
mail(
  "target@somemail.com",
  "Email Title",
  "Email Content",
  "Content-type: text/plain; charset=utf-8;\n"
);

够简单!!并且只需要安装python。

如果它是必需的(即你想通过TLS端口587或直接端口25发送),只需更改一些配置引用python smtplib