我正在从Windows文件夹中挑选一个文件,我正在尝试通过Gmail发送。
该代码在单独的Python程序中执行时可以正常工作,但是我无法在类中使用相同的程序。
import smtplib
import base64
filename = str("JDI Offline.txt").split('\')[-1:][0]
filepath = "C:WindowsJDI Offline.txt"
fo = open(filepath, "rb")
filecontent = fo.read()
fo.close()
encodedcontent = base64.b64encode(filecontent)
sender = 'vusvarshil@gmail.com'
receiver = 'vusvarshil@gmail.com'
marker = "AUNIQUEMARKER"
body = """
Test to send attatchment
"""
part1 = """From: From Varshil<vusvarshil@gmail.com>
To:me
Subject: Sending attatchment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body, marker)
part3 = """Content-Type:multipart/mixed; name="%s"
Content-Transfer-Encoding:base64
Content-Disposition: attatchment; filepath=%s
%s
--%s--
""" % (filename, filepath, encodedcontent, marker)
message = part1 + part2 + part3
try:
mail = smtplib.SMTP('smtp.gmail.com', 587)
mail.ehlo()
mail.starttls()
mail.login('vusvarshil@gmail.com', 'xxxxxxxx')
mail.sendmail('vusvarshil@gmail.com', 'vusvarshil@gmail.com', message)
print "Mail Sent successfully"
except Exception:
print "Error"
当我在类中使用此代码时,我会收到空白邮件。我已连接屏幕截图
在类中使用程序的程序
程序的程序时,没有类的程序
类Sendmail: def send_mail(): 导入SMTPLIB 导入base64
filename = str("JDI Offline.txt").split('\')[-1:][0]
filepath = "C:WindowsJDI Offline.txt"
fo = open(filepath, "rb")
filecontent = fo.read()
fo.close()
encodedcontent = base64.b64encode(filecontent)
sender = 'vusvarshil@gmail.com'
receiver = 'vusvarshil@gmail.com'
marker = "AUNIQUEMARKER"
body = """
Test to send attatchment
"""
part1 = """From: From Varshil<vusvarshil@gmail.com>
To:me
Subject: Sending attatchment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body, marker)
part3 = """Content-Type:multipart/mixed; name="%s"
Content-Transfer-Encoding:base64
Content-Disposition: attatchment; filepath=%s
%s
--%s--
""" % (filename, filepath, encodedcontent, marker)
message = part1 + part2 + part3
try:
mail = smtplib.SMTP('smtp.gmail.com', 587)
mail.ehlo()
mail.starttls()
mail.login('vusvarshil@gmail.com', 'xxxxxxxx')
mail.sendmail('vusvarshil@gmail.com', 'vusvarshil@gmail.com', message)
print "Mail Sent successfully"
except Exception:
print "Error"
ob=sendmail()
ob.send_email()
有人请告诉什么问题。
我找到了解决问题的解决方案。该代码没有工作,因此我搜索了一个新代码。我正在此处发布代码以备将来参考。在以下代码中,我正在读取文件中的数据并附加标签,因为这是我的要求。您可以根据需要更改代码
# coding:utf-8
import smtplib
from email import MIMEMultipart
from email import MIMEText
from email import MIMEBase
from email import encoders
class classname:
def fname(self):
fromaddr = "mshah9900@gmail.com"
toaddr = "vusvarshil@gmail.com"
msg = MIMEMultipart.MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "SUBJECT OF THE EMAIL"
body = "TEXT YOU WANT TO SEND"
msg.attach(MIMEText.MIMEText(body, 'plain'))
filename = "JDI Offline.txt"
fo = open("C:WindowsJDI Offline.txt", "rb")
length = len(fo.readlines())
fo.close()
fo = open("C:WindowsJDI Offline.txt", "rb")
filecontent = ""
arr = ["Company name", "Contact person name", "Email", "Contact no.", "Address_Line_1", "Address_Line_2",
"Address_Line_3", "City", "Pincode", "State", "Country", "PanCard No.", "Model", "Size", "Device Name",
"Serial Number", "MediaType", "Interface type", "OS", "Ip address", "Registered date", "Registered Time"]
for x in range(0,length):
filecontent += arr[x] + ": " + fo.readline().lstrip().rstrip() + "n"
# fo.close()
filecontent += """n
Additional content
"""
fo.close()
#print filecontent
attachment = open("C:WindowsJDI Offline.txt", "rb")
# attachment += "hello"
part = MIMEBase.MIMEBase('application', 'octet-stream')
part.set_payload((filecontent))
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "xxxxxxxx")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
cn=classname()
cn.fname()