2016-12-07 8 views
2

여러 개의 이메일을 보내야합니다 (매일 200 개의 맞춤 이메일과 같이).하지만 모두 동일한 PDF 첨부 파일이 있습니다. 업로드 시간을 절약하기 위해 첨부 파일을 한 번만 업로드 할 수 있습니까? 그보다 더 나은 점은 Google 서버에서 한 번만 파일을 업로드 할 수 있으며 매일 그 파일을 참조 할 수 있습니까? 첨부 여기로드Gmail 및 Python, 동일한 첨부 파일을 사용하여 다른 이메일 보내기

# main function 
def SendMessageAttachment(sender, to, subject, msgHtml, msgPlain, attachmentFile): 
    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    service = discovery.build('gmail', 'v1', http=http) 
    message1 = create_message_with_attachment(sender, to, subject, msgPlain, attachmentFile) 
    SendMessageInternal(service, "me", message1) 

def SendMessageInternal(service, user_id, message): 
    try: 
     message = (service.users().messages().send(userId=user_id, body=message).execute()) 
     print 'Message Id: %s' % message['id'] 
     return message 
    except errors.HttpError, error: 
     print 'An error occurred: %s' % error 


def create_message_with_attachment(
    sender, to, subject, message_text, attachmentFile): 
    """Create a message for an email. 

    Args: 
     sender: Email address of the sender. 
     to: Email address of the receiver. 
     subject: The subject of the email message. 
     message_text: The text of the email message. 
     file: The path to the file to be attached. 

    Returns: 
     An object containing a base64url encoded email object. 
    """ 
    message = MIMEMultipart() 
    message['to'] = to 
    message['from'] = sender 
    message['subject'] = subject 

    msg = MIMEText(message_text) 
    message.attach(msg) 

    print "create_message_with_attachment: file:", attachmentFile 
    content_type, encoding = mimetypes.guess_type(attachmentFile) 

    if content_type is None or encoding is not None: 
     content_type = 'application/octet-stream' 
    main_type, sub_type = content_type.split('/', 1) 
    if main_type == 'text': 
     fp = open(attachmentFile, 'rb') 
     msg = MIMEText(fp.read(), _subtype=sub_type) 
     fp.close() 
    elif main_type == 'image': 
     fp = open(attachmentFile, 'rb') 
     msg = MIMEImage(fp.read(), _subtype=sub_type) 
     fp.close() 
    elif main_type == 'audio': 
     fp = open(attachmentFile, 'rb') 
     msg = MIMEAudio(fp.read(), _subtype=sub_type) 
     fp.close() 
    else: 
     fp = open(attachmentFile, 'rb') 
     msg = MIMEBase(main_type, sub_type) 
     msg.set_payload(fp.read()) 
     fp.close() 
    filename = os.path.basename(attachmentFile) 
    msg.add_header('Content-Disposition', 'attachment', filename=filename) 
    message.attach(msg) 

    return {'raw': base64.urlsafe_b64encode(message.as_string())} 
+0

모든 수신자가 포함 된 이메일 하나를 '숨은 참조 (BCC)'헤더에 보낼 수 있습니까? – onlynone

+0

@onlynone 각 이메일은받는 사람 (예 : 이름)에게 맞춤 설정되므로 하나의 이메일을 보낼 수 없습니다. – apadana

답변

0

:

part = MIMEApplication(open("mypdf.pdf","rb").read()) 

하지만 될 수 헤더 기준 여기 참조

코드 (변성 구글 현상 샘플 코드에서 비트) 인 어디서든

ma를 보내기 전에이 헤더를 추가하는 함수를 쓸 수 있습니다 il을 선택하고 모든 수신자를 반복합니다.

+0

서버에 업로드되었거나 메모리에로드 되었습니까? – apadana

+0

메모리에 있습니다. 그것은 처음에 그것을 열려면 서버에 있어야합니다. –

+0

그래도 이해가된다면 모든 이메일의 첨부 파일을 Gmail 서버에 업로드 할 수 있습니다. – apadana