xref: /aosp_15_r20/external/autotest/client/common_lib/mail.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Liimport os, email, smtplib
2*9c5db199SXin Li
3*9c5db199SXin Li
4*9c5db199SXin Lidef send(from_address, to_addresses, cc_addresses, subject, message_body):
5*9c5db199SXin Li    """
6*9c5db199SXin Li    Send out a plain old text email. It uses sendmail by default, but
7*9c5db199SXin Li    if that fails then it falls back to using smtplib.
8*9c5db199SXin Li
9*9c5db199SXin Li    Args:
10*9c5db199SXin Li            from_address: the email address to put in the "From:" field
11*9c5db199SXin Li            to_addresses: either a single string or an iterable of
12*9c5db199SXin Li                          strings to put in the "To:" field of the email
13*9c5db199SXin Li            cc_addresses: either a single string of an iterable of
14*9c5db199SXin Li                          strings to put in the "Cc:" field of the email
15*9c5db199SXin Li            subject: the email subject
16*9c5db199SXin Li            message_body: the body of the email. there's no special
17*9c5db199SXin Li                          handling of encoding here, so it's safest to
18*9c5db199SXin Li                          stick to 7-bit ASCII text
19*9c5db199SXin Li    """
20*9c5db199SXin Li    # addresses can be a tuple or a single string, so make them tuples
21*9c5db199SXin Li    if isinstance(to_addresses, str):
22*9c5db199SXin Li        to_addresses = [to_addresses]
23*9c5db199SXin Li    else:
24*9c5db199SXin Li        to_addresses = list(to_addresses)
25*9c5db199SXin Li    if isinstance(cc_addresses, str):
26*9c5db199SXin Li        cc_addresses = [cc_addresses]
27*9c5db199SXin Li    else:
28*9c5db199SXin Li        cc_addresses = list(cc_addresses)
29*9c5db199SXin Li
30*9c5db199SXin Li    message = email.Message.Message()
31*9c5db199SXin Li    message["To"] = ", ".join(to_addresses)
32*9c5db199SXin Li    message["Cc"] = ", ".join(cc_addresses)
33*9c5db199SXin Li    message["From"] = from_address
34*9c5db199SXin Li    message["Subject"] = subject
35*9c5db199SXin Li    message.set_payload(message_body)
36*9c5db199SXin Li
37*9c5db199SXin Li    server = smtplib.SMTP("localhost")
38*9c5db199SXin Li    server.sendmail(from_address, to_addresses + cc_addresses, message.as_string())
39*9c5db199SXin Li    server.quit()
40