2016-07-08 18 views
5

Tệp nhập của tôi là tệp CSV và bằng cách chạy một số tập lệnh python bao gồm mô-đun Tabthon, tôi đã tạo một bảng trông như sau: -Gửi bảng dưới dạng nội dung email (không đính kèm) bằng Python

tabulate_output hoặc

| Attenuation | Avg Ping RTT in ms | TCP UP | 
|---------------:|---------------------:|---------:| 
|    60 |    2.31 | 106.143 | 
|    70 |    2.315 | 103.624 | 

tôi xin gửi đến các bảng này trong cơ thể email và không phải là mộttập tin đính kèm sử dụng python.

Tôi đã tạo một hàm sendMail và dự kiến ​​sẽ gửi bảng trong mail_body. sendMail([to_addr], from_addr, mail_subject, mail_body, [file_name])

+0

Bạn có thể yêu cầu người nhận xem thư có phông chữ cố định chiều rộng và chỉ cần đặt bảng trong nội dung email. –

+0

Tại sao không gửi nó dưới dạng bảng html? – Arnial

+0

Bạn sẽ cần phải xây dựng chuỗi HTML và gửi nó qua với tiêu đề Loại nội dung thích hợp. [Ví dụ tại đây] (https://github.com/supersaiyanmode/gapi/blob/master/GApi4Term/commands/email.py#L8). – SuperSaiyan

Trả lời

8

Mã này gửi thông báo bằng văn bản thuần túy điển hình cộng với định dạng nhiều phần/thay thế html. Nếu phóng viên của bạn đọc điều này trong trình đọc thư nhận biết html, anh ta sẽ thấy bảng HTML. Nếu anh ta đọc nó đọc văn bản thuần, anh ta sẽ thấy phiên bản văn bản thuần túy.

Trong cả hai trường hợp, anh ta sẽ thấy dữ liệu được bao gồm trong nội dung thư chứ không phải dưới dạng tệp đính kèm.

import csv 
from tabulate import tabulate 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
import smtplib 

me = '[email protected]' 
password = 'yyyzzz!!2' 
server = 'smtp.gmail.com:587' 
you = '[email protected]' 

text = """ 
Hello, Friend. 

Here is your data: 

{table} 

Regards, 

Me""" 

html = """ 
<html><body><p>Hello, Friend.</p> 
<p>Here is your data:</p> 
{table} 
<p>Regards,</p> 
<p>Me</p> 
</body></html> 
""" 

with open('input.csv') as input_file: 
    reader = csv.reader(input_file) 
    data = list(reader) 

text = text.format(table=tabulate(data, headers="firstrow", tablefmt="grid")) 
html = html.format(table=tabulate(data, headers="firstrow", tablefmt="html")) 

message = MIMEMultipart(
    "alternative", None, [MIMEText(text), MIMEText(html,'html')]) 

message['Subject'] = "Your data" 
message['From'] = me 
message['To'] = you 
server = smtplib.SMTP(server) 
server.ehlo() 
server.starttls() 
server.login(me, password) 
server.sendmail(me, you, message.as_string()) 
server.quit() 
+0

@ Rob- Thnx rất nhiều. Đã làm cho tôi. Đây là dòng chính: message = MIMEMultipart ( "thay thế", Không, [MIMEText (văn bản), MIMEText (html, 'html')]) – Durvesh

+0

Xin chào Rob, Tôi đã sử dụng đoạn mã này với Python 2.6 , Email có vẻ đang hoạt động, bảng HTML hiển thị dữ liệu có tổ chức, nhưng không có đường viền xung quanh nó để làm cho bảng thực sự trực quan. Bạn có thể vui lòng đề xuất những gì cần phải được thực hiện ở đây? –

+0

@VenuS - Tôi không chắc chắn cách xác định một bảng bằng cách sử dụng gói 'tabulate'. Có lẽ bạn có thể xây dựng HTML theo một cách khác và chỉ định thuộc tính 'border' hoặc sử dụng CSS. Bất kể, bạn có thể muốn mở một câu hỏi mới trên [SO] để xem những gì người khác phải nói. –

Các vấn đề liên quan