安装和配置sendmail

安装和配置sendmail

有没有什么方法可以在没有任何身份验证的情况下从 Linux 机器向用户电子邮件地址发送文件?

我想在没有 SMTP 服务器的情况下将文件从用户计算机发送到其他用户电子邮件地址。如果是,我们可以从 gmail 发送它,它应该通过脚本自动完成,用户不应该进行任何手动工作。

答案1

SMTP 是一项要求(简单邮件传输协议)。有方法可以配置使用 GMail SMTP 中继发送邮件

安装和配置sendmail

作为 Debian 系统上的 root 用户。

apt-get install sendmail mailutils sendmail-bin
mkdir -m 700 /etc/mail/authinfo
cd /etc/mail/authinfo
#hash your gmail password info
makemap hash gmail-auth <<<'AuthInfo: "U:root" "I:YOUR GMAIL EMAIL ADDRESS" "P:YOUR PASSWORD"'
#don't save your bash history because of password info
unset HISTFILE

将以下行放入 sendmail.mc 配置文件中第一个“MAILER”定义行的正上方:

define(`SMART_HOST',`[smtp.gmail.com]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/authinfo/gmail-auth.db')dnl

重新构建 sendmail 的配置:

make -C /etc/mail

重新加载发送邮件:

/etc/init.d/sendmail reload

测试发送邮件

echo "A simple message" | mail -s "Some subject" [email protected]

答案2

是的,我想通过附加文件来发送自动电子邮件,无需 smtp 服务器

在这种情况下,我会使用 Python(过去也这样做过,尽管没有使用附件)。只需几分钟即可使用 Python 发送电子邮件import

下面是我刚刚使用 Gmail 地址快速拼凑而成的一个示例:

#!/usr/bin/env python3

import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# Your login credentials
sender = "[email protected]"
emailPasswd = "yourpassword"

# Who are we sending to
receiver = "[email protected]"

# The path to the file we want to attach
fileToAttach = "att.txt"

msg = MIMEMultipart()
msg['Subject'] = "Here's an e-mail with attachment"
msg['From'] = sender
msg['To'] = receiver
body = "Mail with attachment"
bodyText = MIMEText(body, "plain")

# Now we try to add the attachment
try:
    att = open(fileToAttach)
    attachment = MIMEText(att.read())
    attachment.add_header('Content-Disposition', 'attachment', filename=fileToAttach)
except IOError:
    print("Could not add attachment {}".format(fileToAttach))
    exit(1)

# "Attach" both the attachment and body to 'msg'
msg.attach(bodyText)
msg.attach(attachment)

# Connect and send e-mail
server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()
server.login(sender, emailPasswd)
server.sendmail(sender, receiver, msg.as_string())
server.quit()

这有效,但直到你完成后才有效。如果您不允许“安全性较低的应用程序访问您的 [Gmail] 帐户”,您将不是能够使用脚本登录。相反,您将得到一个SMTPAuthenticationError(错误代码534)。看这里一个很好的参考。

现在,也许不需要指出,但无论如何我都会这样做;我上面的小代码片段适用于txt附件。例如,如果您想附加图像,则必须导入相应的模块:from email.mime.image import MIMEImage

另外,如果您不想“硬编码”附件文件,您可以简单地将其作为参数传递。如果调用该脚本./pySmtp.py,请像这样调用它:

./pySmtp.py att.txt

如果是这样,请将代码更改为:

#!/usr/bin/env python3

import sys
import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# Your login credentials
sender = "[email protected]"
emailPasswd = "yourpassword"

# Who are we sending to
receiver = "[email protected]"

# The path to the file we want to attach
fileToAttach = sys.argv[1]

[rest of code stays the same]

至于“自动”部分,您必须根据自己的需要自行选择。

相关内容