如何在python3中将参数解析为发送电子邮件

时间:2017-11-19 21:03:39

标签: python python-3.x email

因为mailutils不可用我试着编写一个简单的python脚本来发送如下电子邮件:

echo text | mail -s "some subject" -r jo@do.com

我已成功捕获参数并打印它们,但我不知道如何将这些参数放入电子邮件标题部分。

脚本像这样运行

./m2.py -s "dag mijnheer" -r hanscees@hanscees.con

脚本运行,但是这很失败..在下面的脚本中,电子邮件标题为空,尽管它是以电子邮件形式发送的。

我也尝试过使用smtpObj.sendmail(sender,RECIPIENT,message2)

但这并不奏效。 如何让这些标题填充文本和变量?

#!/usr/bin/python3

import argparse
import smtplib

## get commandline arguments
def commandLineSetup():
    commandParser = argparse.ArgumentParser(description="Sends email "
                                                         "to email server by smtp")
    commandParser.add_argument("-s", "--subject", help="Subject of email")
    commandParser.add_argument("-r", "--recipient", help="emailaddress of recipient")

    args = commandParser.parse_args()

    return args.subject, args.recipient

def main():
    SUBJECT, RECIPIENT = commandLineSetup()

    # Check that proper inputs were provided
    if not SUBJECT or not RECIPIENT:
        print ("Insufficient inputs provided")
        exit()
    sender = "docker79@hanscees.con"
    print ("sendto adress is", RECIPIENT)
    #built list with text message
    message2 = 'FROM: '+sender+'\n'+'TO: '+RECIPIENT+'\n'+'SUBJECT: ',SUBJECT,'\n'
    print ("messages2 is", message2)

    message = """From: sender
    To: RECIPIENT
    Subject: SUBJECT

    This is a test e-mail message.
    """
    try:
       smtpObj = smtplib.SMTP('192.168.0.111')
       smtpObj.sendmail(sender, RECIPIENT, message)
       print ("Successfully-sent-email")
    except smtplib.SMTPException:
       print ("Error-unable-to-send-email")




if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:0)

好吧,找到了一个结合几个地方的答案。 这是一个python3脚本,用于发送实际工作正常的电子邮件。 我在网上的任何地方都找不到这个令我惊讶的地方。 欢迎任何改进。因为如果cat / dev / null进入它可能会导致计算机崩溃:(

像这样使用

echo some text | pymail3.py -s "how are you " -r somebody@somewhere.com

建议您必须手动添加邮件服务器并从脚本中的地址添加。它只会向25端口发送电子邮件。

pymail3.py

#!/usr/bin/python3

import argparse
import smtplib
from email.message import EmailMessage
from email.headerregistry import Address
from email.utils import make_msgid

## get commandline arguments
def commandLineSetup():
    commandParser = argparse.ArgumentParser(description="Sends email piped in "
                                                         "to email server by smtp")
    commandParser.add_argument("-s", "--subject", help="Subject of email")
    commandParser.add_argument("-r", "--recipient", help="emailaddress of recipient")
    args = commandParser.parse_args()
    return args.subject, args.recipient

def main():
    SUBJECT, RECIPIENT = commandLineSetup()

    # Check that proper inputs were provided
    if not SUBJECT or not RECIPIENT:
        print ("Insufficient inputs provided")
        exit()
    sender="dockerdaemon79@hanscees.con"
    msg = EmailMessage()
    msg["Subject"] =  SUBJECT
    msg["From"] = Address("dockershost", addr_spec=sender)
    msg["To"] =  Address("whomwever", addr_spec=RECIPIENT)

    #lets get text from stdin
    data = ""
    for line in sys.stdin:
       data += line
    msg.set_content (data)

    server = smtplib.SMTP('192.168.0.254', 25)

    try:
       server.send_message(msg)
       server.quit()
    except smtplib.SMTPException:
       print ("Error-unable-to-send-email")

if __name__ == "__main__":
    main()