Python 发送邮件支持附件
通过命令行发送邮件,功能强大
命令:
1
|
# python ./mail -s $server -f $from -t $to -u $user -p $pass -S "$subject" -m "${mail_msg}" -F $file
|
源代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# vim mail
#!/usr/bin/python
from
email
.
MIMEText
import
MIMEText
from
email
.
MIMEMultipart
import
MIMEMultipart
from
email
.
MIMEBase
import
MIMEBase
from
email
import
Utils
,
Encoders
import
mimetypes
,
sys
,
smtplib
,
socket
,
getopt
class
SendMail
:
def
__init__
(
self
,
smtp_server
,
from_addr
,
to_addr
,
user
,
passwd
)
:
self
.
mailserver
=
smtp_server
self
.
from_addr
=
from_addr
self
.
to_addr
=
to_addr
self
.
username
=
user
self
.
password
=
passwd
def
attachment
(
self
,
filename
)
:
fd
=
open
(
filename
,
'rb'
)
filename
=
filename
.
split
(
'/'
)
mimetype
,
mimeencoding
=
mimetypes
.
guess_type
(
filename
[
-
1
]
)
if
(
mimeencoding
is
None
)
or
(
mimetype
is
None
)
:
mimetype
=
'application/octet-stream'
maintype
,
subtype
=
mimetype
.
split
(
'/'
)
if
maintype
==
'text'
:
retval
=
MIMEText
(
fd
.
read
(
)
,
_subtype
=
subtype
,
_charset
=
'utf-8'
)
else
:
retval
=
MIMEBase
(
maintype
,
subtype
)
retval
.
set_payload
(
fd
.
read
(
)
)
Encoders
.
encode_base64
(
retval
)
retval
.
add_header
(
'Content-Disposition'
,
'attachment'
,
filename
=
filename
[
-
1
]
)
fd
.
close
(
)
return
retval
def
msginfo
(
self
,
msg
,
subject
,
filename
)
:
# message = """Hello, ALL
#This is test message.
#--Anonymous"""
message
=
msg
msg
=
MIMEMultipart
(
)
msg
[
'To'
]
=
self
.
to_addr
msg
[
'From'
]
=
'sa <'
+
self
.
from_addr
+
'>'
msg
[
'Date'
]
=
Utils
.
formatdate
(
localtime
=
1
)
msg
[
'Message-ID'
]
=
Utils
.
make_msgid
(
)
if
subject
:
msg
[
'Subject'
]
=
subject
if
message
:
body
=
MIMEText
(
message
,
_subtype
=
'plain'
)
msg
.
attach
(
body
)
#for filename in sys.argv[1:]:
if
filename
:
msg
.
attach
(
self
.
attachment
(
filename
)
)
return
msg
.
as_string
(
)
def
send
(
self
,
msg
=
None
,
subject
=
None
,
filename
=
None
)
:
try
:
s
=
smtplib
.
SMTP
(
self
.
mailserver
)
try
:
s
.
login
(
self
.
username
,
self
.
password
)
except
smtplib
.
SMTPException
,
e
:
print
"Authentication failed:"
,
e
sys
.
exit
(
1
)
s
.
sendmail
(
self
.
from_addr
,
self
.
to_addr
.
split
(
','
)
,
self
.
msginfo
(
msg
,
subject
,
filename
)
)
except
(
socket
.
gaierror
,
socket
.
error
,
socket
.
herror
,
smtplib
.
SMTPException
)
,
e
:
print
"*** Your message may not have been sent!"
print
e
sys
.
exit
(
2
)
else
:
print
"Message successfully sent to %d recipient(s)"
%
len
(
self
.
to_addr
)
if
__name__
==
'__main__'
:
def
usage
(
)
:
print
"""Useage:%s [-h] -s <SMTP Server> -f <FROM_ADDRESS> -t <TO_ADDRESS> -u <USER_NAME> -p <PASSWORD> [-S <MAIL_SUBJECT> -m <MAIL_MESSAGE> -F <ATTACHMENT>]
Mandatory arguments to long options are mandatory for short options too.
-f, --from= Sets the name of the "from" person (i.e., the envelope sender of the mail).
-t, --to= Addressee's address. -t "test@test.com,test1@test.com".
-u, --user= Login SMTP server username.
-p, --pass= Login SMTP server password.
-S, --subject= Mail subject.
-m, --msg= Mail message.-m "msg, ......."
-F, --file= Attachment file name.
-h, --help Help documen.
"""
%
sys
.
argv
[
0
]
sys
.
exit
(
3
)
try
:
options
,
args
=
getopt
.
getopt
(
sys
.
argv
[
1
:
]
,
"hs:f:t:u:p:S:m:F:"
,
"--help --server= --from= --to= --user= --pass= --subject= --msg= --file="
,
)
except
getopt
.
GetoptError
:
usage
(
)
sys
.
exit
(
3
)
server
=
None
from_addr
=
None
to_addr
=
None
username
=
None
password
=
None
subject
=
None
filename
=
None
msg
=
None
for
name
,
value
in
options
:
if
name
in
(
"-h"
,
"--help"
)
:
usage
(
)
if
name
in
(
"-s"
,
"--server"
)
:
server
=
value
if
name
in
(
"-f"
,
"--from"
)
:
from_addr
=
value
if
name
in
(
"-t"
,
"--to"
)
:
to_addr
=
value
if
name
in
(
"-u"
,
"--user"
)
:
username
=
value
if
name
in
(
"-p"
,
"--pass"
)
:
password
=
value
if
name
in
(
"-S"
,
"--subject"
)
:
subject
=
value
if
name
in
(
"-m"
,
"--msg"
)
:
msg
=
value
if
name
in
(
"-F"
,
"--file"
)
:
filename
=
value
if
server
and
from_addr
and
to_addr
and
username
and
password
:
test
=
SendMail
(
server
,
from_addr
,
to_addr
,
username
,
password
)
test
.
send
(
msg
,
subject
,
filename
)
else
:
usage
(
)
|
收 藏
成长的对话版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!