有没有什么方法可以在没有任何身份验证的情况下从 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]
至于“自动”部分,您必须根据自己的需要自行选择。