Re: [google-appengine] python 3.6: struggle to send an email with a file attached to it (NameError: name 'encoders' is not defined)

578 views
Skip to first unread message
Message has been deleted

Alex Martelli

unread,
Mar 3, 2017, 12:49:43 PM3/3/17
to google-a...@googlegroups.com
Indeed, as the message says, you have nowhere defined the top-level name `encoders`.

Presumably, you're missing an import for that name as per https://docs.python.org/3/library/email.encoders.html -- `from email import encoders` among other imports at the top of your code.


Alex

On Fri, Mar 3, 2017 at 9:08 AM, Guillaume France <gc.c...@gmail.com> wrote:
I'm struggling to send an email with a file attached to it.

Hi!

I'm struggling with the create_message_with_attachment function (the rest works, create_message_without_attachment works ). 

I did read google documentation. The stack threads talking about it focus on complex issue (while mixing up on the top of it different syntax of python version). Posting this in stack will be down-voted as duplicated (stack has its limit).

I'm just trying with the script bellow to create an email, attach a file to it and send it. 


The python 3.6 script returns: 
  encoders.encode_base64(part)
NameError: name 'encoders' is not defined




import httplib2
import os
import oauth2client
from oauth2client import client, tools
import base64
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from apiclient import errors, discovery  

SCOPES
= 'https://www.googleapis.com/auth/gmail.send'
CLIENT_SECRET_FILE
= 'client_secret.json'
APPLICATION_NAME
= 'Gmail API Python Send Email'

def get_credentials():
 home_dir
= os.path.expanduser('~')
 credential_dir
= os.path.join(home_dir, '.credentials')
 
if not os.path.exists(credential_dir):
 os
.makedirs(credential_dir)  #create folder if doesnt exist
 credential_path
= os.path.join(credential_dir, 'gmail-python-email-send.json')
 store
= oauth2client.file.Storage(credential_path)
 credentials
= store.get()
 
if not credentials or credentials.invalid:
 flow
= client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
 flow
.user_agent = APPLICATION_NAME
 credentials
= tools.run_flow(flow, store)
 
print('Storing credentials to ' + credential_path)
 
return credentials
 
def SendMessage(sender, to, subject, msgHtml, msgPlain):
 credentials
= get_credentials()
 http
= httplib2.Http()
 http
= credentials.authorize(http)
 service
= discovery.build('gmail', 'v1', http=http)
 
 
# #with attachement
 message_with_attach
= create_message_with_attachment(sender, to, subject, msgHtml, msgPlain)
 
SendMessageInternal(service, "me", message_with_attach)

 
# #without attachment
 
# message_without_attachment = create_message_without_attachment(sender, to, subject, msgHtml, msgPlain)
 
# SendMessageInternal(service, "me", message_without_attachment)
 
 
def SendMessageInternal(service, user_id, message):
 
try:
 message
= (service.users().messages().send(userId=user_id, body=message).execute())  ####need  to get user_id before

 message_ID
= message['id']
 
print(f'Message Id: {message_ID}')
 
return [message, message_ID] #return value as list
 
except errors.HttpError as error:
 
print(f'An error occurred: {error}')
 
 
def create_message_without_attachment (sender, to, subject, msgHtml, msgPlain):
 msg
= MIMEMultipart('alternative')
 msg
['Subject'] = subject
 msg
['From'] = sender
 msg
['To'] = to
 msg
.attach(MIMEText(msgPlain, 'plain'))
 msg
.attach(MIMEText(msgHtml, 'html'))
 
 raw
= base64.urlsafe_b64encode(msg.as_bytes())
 raw
= raw.decode()
 body
= {'raw': raw}
 
return body
 
def create_message_with_attachment(sender, to, subject, msgHtml, msgPlain):
 msg
= MIMEMultipart('alternative')
 msg
['To'] = to
 msg
['From'] = sender
 msg
['Subject'] = subject
 msg
.attach(MIMEText(msgPlain, 'plain'))
 msg
.attach(MIMEText(msgHtml, 'html'))

 
# the problem comes from this part
 part
= MIMEBase('application', "octet-stream")
 part
.set_payload( open(r"C:\Users\xx\Desktop\test_Attachment.txt","rb").read() )
 encoders
.encode_base64(part)
 part
.add_header('Content-Disposition', 'attachment; filename="{0}"'.format(os.path.basename(f)))
 msg
.attach(part)
 
 raw
= base64.urlsafe_b64encode(msg.as_bytes())
 raw
= raw.decode()
 body
= {'raw': raw}
 
return body
 
def main():
 to
= "your...@gmail.com"
 sender
= "mye...@gmail.com"
 subject
= "subject test1"
 msgHtml
= r'Hi<br/>Html <b>hello</b>'
 msgPlain
= "Hi\nPlain Email"
 message_text
= "this is message text"
 
SendMessage(sender, to, subject, msgHtml, msgPlain)


if __name__ == '__main__':
 main
()



--
You received this message because you are subscribed to the Google Groups "Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-appengine+unsubscribe@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at https://groups.google.com/group/google-appengine.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-appengine/7c6e9e54-6d62-473a-bc80-5d5c71e75be5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Message has been deleted
Message has been deleted
Message has been deleted

Alex Martelli

unread,
Mar 3, 2017, 6:17:54 PM3/3/17
to google-a...@googlegroups.com
I would recommend you post this code and question to stackoverflow.com -- a very popular site regularly visited by many programming experts who like to answer technical questions (me included, when I have free time). You may want to just tag the question as python and email, since it's not really germane to google-app-engine (if you tagged it with the latter anyway, your question might be avoided by experts on python and email who are not also expert on App Engine).


Alex


On Fri, Mar 3, 2017 at 12:19 PM, Guillaume France <gc.c...@gmail.com> wrote:

Thanks a lot Alex, you are right the from email import encoders was missing. Now it sends the email but without the file attached to it. 

Any idea what could go wrong with this function? (I corrected other things on it, it's the result of patchwork of code I took from several places)


def create_message_with_attachment(sender, to, subject, msgHtml, msgPlain):


 
# Create message container - the correct MIME type is multipart/alternative.

 msg
= MIMEMultipart('alternative')
 msg
['To'] = to
 msg
['From'] = sender
 msg
['Subject'] =
subject
 
 
# Record the MIME types of both parts - text/plain and text/html
 part1
= MIMEText(msgPlain, 'plain')
 part2
= MIMEText(msgHtml, 'html')
 
 
# create .txt attachment
 filename
=r"C:\Users\xxx\Desktop\test_Attachment.txt"
 fp
=open(filename,'rb')
 att
= email.mime.application.MIMEApplication(fp.read(),_subtype="txt")
 fp
.close()
 att
.add_header('Content-Disposition','attachment',filename=filename)


 
# Attach parts into message container.
 msg
.attach(att)
 msg
.attach(part1)
 msg
.attach(part2)
 
 
# raw = base64.urlsafe_b64encode(msg.as_bytes())
 raw
= encoders.encode_base64(msg)

 raw
= raw.decode()
 body
= {'raw': raw}
 
return body

--
You received this message because you are subscribed to the Google Groups "Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-appengine+unsubscribe@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at https://groups.google.com/group/google-appengine.

Guillaume France

unread,
Mar 4, 2017, 7:14:41 AM3/4/17
to google-a...@googlegroups.com
I understand that this kind of question bother you, and the people of this group, but as I mention in my email, it does also bother people on the stack. (This question will be seen and down-voted as duplicate.)

Since it’s a question about a Google product (Gmail API), the logical way would be to post it in forum own by Google, since users seeking help are under its responsibility. This Google group seems to be the only one talking about Gmail api.

The reality is that Google escape from its responsibility by asking users to use stack. But you seem to ignore that Google doesn’t own stack, and that stack has not been built to serve as Gmail api discussion*. Stack has its own rules, you can’t ask such question (without losing points).

So asking Gmail API user seeking for help to leave this group might clear your conscience but that’s pretty much all it does.

* Just another  example: I did struggle with several points from the code Google that causes an error in python 3 (google don't update its code). I wanted to share one of them on a stack, in order to help other users. It cost me some reputation point for those —so I won’t do it again. (I then set my answer as "wiki", to don’t lose more points)

ps: By the way if I deleted the question and posted it again in this group it’s because I could not edit it, the topic was not accurate anymore and misleading (Google should probably learn from what other company is doing, like Microsoft

--
You received this message because you are subscribed to a topic in the Google Groups "Google App Engine" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/google-appengine/O94qnKnQu-k/unsubscribe.
To unsubscribe from this group and all its topics, send an email to google-appengine+unsubscribe@googlegroups.com.

To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at https://groups.google.com/group/google-appengine.

Alex Martelli

unread,
Mar 4, 2017, 1:21:02 PM3/4/17
to google-a...@googlegroups.com
On Sat, Mar 4, 2017 at 4:14 AM, Guillaume France <gc.c...@gmail.com> wrote:
I understand that this kind of question bother you, and the people of this group, but as I mention in my email, it does also bother people on the stack. (This question will be seen and down-voted as duplicate.)

Since it’s a question about a Google product (Gmail API), the logical way would be to post it in forum own by Google,

The logical way, if the Gmail API was indeed pertinent, might be to post in a forum that's about the Gmail API. Why you choose instead to post in a forum that's about a different product (Google App Engine) I am still unable to understand.

If you had, say, problems with some Fruit of the Loom product, would you choose to discuss them in a forum about Dairy Queen, just because Berkshire Hathaway owns both?

And I don't see ANY reference to gmail in your code on this thread, either -- specifically in the code of function create_message_with_attachment which you posted on this thread. It only uses stuff from the email package of the standard Python library.

Further, I do not understand why you claim that posting your question to stackoverflow would result in it being closed as duplicate. That would happen only if the same subject (adding an attachment to a multipart/alternate mail, in Python 3) had already been covered, and in this case you'd get a pointer to the preexisting question, whose answer would also be an answer to your own question. That's part of how stackoverflow works -- and I know the site pretty well, having a reputation of over half a million over there.

 
since users seeking help are under its responsibility. This Google group seems to be the only one talking about Gmail api.

This group, as it says right at https://groups.google.com/forum/#!forum/google-appengine, is "the community forum for users of Google App Engine" -- a very different product from Gmail. I believe discussions of gmail happen at https://productforums.google.com/forum/#!forum/gmail (though I'm not an expert about that) and a brief search suggests that discussions specifically about the API parts of gmail are no exception. But, again, your function create_message_with_attachment does not appear to make any use whatsoever of any part of a gmail API.
 

The reality is that Google escape from its responsibility by asking users to use stack. But you seem to ignore that Google doesn’t own stack, and that stack has not been built to serve as Gmail api discussion*. Stack has its own rules, you can’t ask such question (without losing points).

Generic "discussion" is indeed inappropriate on stackoverflow; specific technical questions and answers, on "every question about programming" to quote the site itself, are what it's all about. Since you do appear to have a specific question about programming, it should be welcome there (once appropriately tagged). As I mention, my reputation score there is over half a million, so I must not have lost too many points by asking inappropriate questions -- which suggests to me that I do know which questions are or are not appropriate there.

The fact that neither Google nor any of our main competitors own stackoverflow (all of stackexchange is owned by an independent private company) makes for an interesting "level playing field" in the specific arena of technical questions and answers about programming. stackoverflow, as a company, welcomes sponsorship of specific tags by companies interested in them -- that's how a tag such as google-app-engine displays the Google Cloud Platform (GCP) logo and sponsored links to our documentation, github, etc -- and similarly, a tag such as azure (sponsored by Microsoft) displays the Azure logo and sponsored links of Microsoft's choosing.
 

So asking Gmail API user seeking for help to leave this group might clear your conscience but that’s pretty much all it does.

Once again, you are factually incorrect (and using italics won't change that:-). stackoverflow's well-deserved popularity means that a helpful answer given there gains more web visibility than on almost any other venue; if you use a search engine to locate answers to popular programming questions, you'll notice that pages on stackoverflow.com are frequently close to the top of the search results. For example, search for [python flatten list of lists] and the top two results are both on stackoverflow.com (the second one a duplicate).

Therefore, anybody who wants to help others as broadly as possible will by preference do so on stackoverflow.com for appropriate issues (technical Q & A to questions that are about programming), so the help will reach as many people as feasible. But that of course is only going to work if questions that are appropriate for stackoverflow ARE asked there, rather than on random unrelated forums. Encouraging appropriate questions to be posted to appropriate sites makes the world an (incrementally) better place. Through it, according to stackoverflow's own heuristics, I have helped over 44 million people with my answers on that site; that's orders of magnitude more people than the one who subscribe to any given mailing list, including this one. Moreover, if a mailing list about Google App Engine welcomed questions that are not about App Engine at all, as you appear to believe it should, its readership would soon plummet as readers interested in App Engine unsubscribed from the list due to its spamminess.
 

* Just another  example: I did struggle with several points from the code Google that causes an error in python 3 (google don't update its code). I wanted to share one of them on a stack, in order to help other users. It cost me some reputation point for those —so I

stackoverflow.com (except for the new/beta "documentation" slice, which I'm not very familiar with) is about specific technical answers to specific technical questions about programming. "Sharing to help other users", not in response to specific technical questions, is not within this remit, despite it being done with the best of intentions.

Asking a specific, precise technical question about programming, as you would be doing in this case, is a completely different case.
 
won’t do it again. (I then set my answer as "wiki", to don’t lose more points)

ps: By the way if I deleted the question and posted it again in this group it’s because I could not edit it, the topic was not accurate anymore and misleading (Google should probably learn from what other company is doing, like Microsoft

Google and Microsoft (and others) sponsor chosen tags on Stackoverflow. Microsoft also uses third-party site uservoice, e.g https://visualstudio.uservoice.com/forums/121579-visual-studio-ide , and so does Google, e.g https://google.uservoice.com/forums/249-general . I am sure there are many, many other channels which either or both do use or could use (for example, this mailing list is one) although at some point you run into the problem of "too many channels".


Alex
 

Alex Martelli

unread,
Mar 4, 2017, 2:27:32 PM3/4/17
to google-a...@googlegroups.com
...and BTW, yet another major bug in your code (100% unrelated to either App Engine or the Gmail API, I believe) comes in the line:

raw= encoders.encode_base64(msg)

which appears to completely disregard a clear note in the Python standard library documentation -- https://docs.python.org/3/library/email.encoders.html -- stating, and I quote:

Note that these functions are not meaningful for a multipart message. They must be applied to individual subparts instead, and will raise a TypeError if passed a message whose type is multipart.

("these functions" meaning all those in email.encoders). But remember, you built `msg` as:

msg = MIMEMultipart('alternative')

so it is indeed "a multipart message" -- and indeed, your code does raise TypeError, just as the docs say it will, since msg is exactly "a message whose type is multipart".

(I kept researching the bugs in your code, since it's Saturday anyway, so I'm on my own time, and my interest in Python is not limited to Google App Engine -- the third edition of "Python in a Nutshell" is due out in a month-plus, and in it I do cover the standard library's email package; so, just checking if I did properly give that warning, as the online docs do per the above quote, in my condensed coverage of email.encoders).


Alex

Guillaume France

unread,
Mar 4, 2017, 3:20:11 PM3/4/17
to Google App Engine
Hi Alex,

First I apologize for the italic, that wasn't mature. But your reaction was super: I warmly thank you for that!

I also thank you for the quality of your answer. Especially for pointing me to the right forum (I'm both impressed and sorry. Impressed you did not send me to the right forum right away, it says a lot about you. I'm also sorry to have wasted your time).

Regarding the Google group: I did the "brief search" you are talking about to try to find the right Gmail api forum, I just typed "Gmail api" and this group was the most accurate group name. The other result asked me to post downvoted question on Stack.

The Google-appengine name surprised me, but since I usually find Google documentation obscure, coming from Google an obscure name sounds logical (it's even more obscure since the right group did not even come as the first result).


Concerning Stack, I have a completely different experience, or I would say you have a completely different perception than all the stack users I know. Your explanation is interesting:

My reputation score there is over half a million, so I must not have lost too many points by asking inappropriate questions -- which suggests to me that I do know which questions are or are not appropriate there.

But I have an even simpler explanation : Your question are not down-voted because the questions you ask aren't basic.


Basic users struggle in Stack, because they are looking for basic information, the one that seem so obvious to people like you (it's not judgmental, on the contrary) that nobody asks them. Asking these basic questions aren't welcome on Stack (at all) because they look stupid, or lacking a research investment. (It also applies to the "a brief search suggests". My brief search suggested this Google-appengine group). Many stack people don't really get that some stack users aren't all programmers. I understand that stack hasn't been made for the basic users, I accept it and I'm glad to have it, but I have a completely different opinion than yours. ((It's fascinating how people could have different way to look at the same reality.))

"Sharing to help other users", not in response to specific technical questions, is not within this remit

Ok, but that's a kind of answers that are very, very precious for basic users (because they seems too obvious that nobody talks about it).

I just finish by warmly thanking you for the million people you have helped, that's really something to be proud of ―more of anything. I also thank you for the kindness of your message.

I wish you the best, and greeting from the other stack universe: the wild west stack of the basic user!

(*You would have guess that the stack users I know aren't programmers either!)

Guillaume France

unread,
Mar 4, 2017, 4:52:59 PM3/4/17
to google-a...@googlegroups.com
Hi again Alex, I just found your email in the thread, the one you were talking about the raw= encoders.encode_base64(msg) .

I discovered that bug yesterday and commented that line (which correctly send the email ― without the attachment though, would have been too easy!). But I did not know what was wrong with this encoder (so many thing to understand in that code), so I thank you for your explanation.

 I'm really impressed you helped me despite the italic line and above all: despite the fact I ended up in the wrong forum (it's embarrassing!) you are an amazing guy... 

So thanks a lot, I finally took the "risk"to face a downvote mob justice by posted it in stack. I'm also curious to see if it will be downvoted (so I could sue Google for that!)

Guillaume, your proudly 44.000.001's user you helped

--
You received this message because you are subscribed to a topic in the Google Groups "Google App Engine" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/google-appengine/O94qnKnQu-k/unsubscribe.
To unsubscribe from this group and all its topics, send an email to google-appengine+unsubscribe@googlegroups.com.

To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at https://groups.google.com/group/google-appengine.

Alex Martelli

unread,
Mar 4, 2017, 10:02:02 PM3/4/17
to google-a...@googlegroups.com
Hi Guillaume, and I'm very glad to see that you've taken my reply in the positive, helpful spirit it was meant in -- I'm Italian, with a touch of French, and find our Latin cultural openness and frankness sometimes grate in the globalized culture of the tech world... happy it didn't here!

On Sat, Mar 4, 2017 at 12:20 PM, Guillaume France <gc.c...@gmail.com> wrote:
Hi Alex,

First I apologize for the italic, that wasn't mature. But your reaction was super: I warmly thank you for that!


Being unable to move my hands to qualify what I'm saying (a pronounced cultural trait in Italy but far from unknown in France) often makes me tempted to use italic and/or bold, too, so, full sympathy!-)
 
I also thank you for the quality of your answer. Especially for pointing me to the right forum (I'm both impressed and sorry. Impressed you did not send me to the right forum right away, it says a lot about you. I'm also sorry to have wasted your time).

No problem, and I do appreciate your concern. The subtlety of the email package (sometimes a tad too subtle for its own good, and I say that with a slightly apologetic tone as a core Python committer, even though I didn't contribute to that standard library package in particular... not helping out with it makes me 1% guilty since I *could* have helped design or at least document it better!-) is worth exploring and understanding better.
 

Regarding the Google group: I did the "brief search" you are talking about to try to find the right Gmail api forum, I just typed "Gmail api" and this group was the most accurate group name. The other result asked me to post downvoted question on Stack.

The Google-appengine name surprised me, but since I usually find Google documentation obscure, coming from Google an obscure name sounds logical (it's even more obscure since the right group did not even come as the first result).

I have to sympathize with you on this point -- yes, our docs (and in particular, product naming) could definitely be better, overall; sorry:-(.
 


Concerning Stack, I have a completely different experience, or I would say you have a completely different perception than all the stack users I know. Your explanation is interesting:

My reputation score there is over half a million, so I must not have lost too many points by asking inappropriate questions -- which suggests to me that I do know which questions are or are not appropriate there.

But I have an even simpler explanation : Your question are not down-voted because the questions you ask aren't basic.

Perhaps. In retrospect the few Qs I've asked do appear rather basic to me in retrospect (based on what I know now vs what little I knew when I asked) -- how to use EXPLAIN to predict query performance on MySQL (asked back when I understood MySQL 1/10th as much as I did PostgreSQL -- 8 years later, the proportion may be reversed:-), etc.

But Qs don't get downvoted for being basic; basic Qs are just as OK as advanced ones. That's the theory, and that's my perception of Stackoverflow. Since most Qs are basic, how could SO have become so popular if basic Qs were discouraged?!
 
Basic users struggle in Stack, because they are looking for basic information, the one that seem so obvious to people like you (it's not judgmental, on the contrary) that nobody asks them. Asking these basic questions aren't welcome on Stack (at all) because they look stupid, or lacking a research investment. (It also applies to the "a brief search suggests". My brief search suggested this Google-appengine group). Many stack people don't really get that some stack users aren't all programmers. I understand that stack hasn't been made for the basic users, I accept it and I'm glad to have it, but I have a completely different opinion than yours. ((It's fascinating how people could have different way to look at the same reality.))

Definitely! I'm a programmer -- ended up becoming one, after starting out as a designer of integrated circuits with hardly any software learning (just one mandatory course on Fortran!-) because that's where the best jobs were, and I found I could mostly self-teach myself the software side of the force (and exploit the willingness to help me on the part of many experienced programmers... lots of what I've been doing since is "pay forward" the huge amounts of help I was given and can never "pay back"!-).

Interestingly, my wife Anna isn't a programmer -- she's a psychologist with a degree from Stanford -- yet she was the first woman Fellow of the Python Software Foundation, the first woman winner of the Frank Willison award for contributions to Python, and co-author with me of two O'Reilly books on Python (2nd ed of the Python Cookbook, and now, 3rd ed of Python in a Nutshell, due out in about a month but you can buy the Early Release edition right now and get the final version when ready:-). Our (red) Prius's license plate is P♥︎THON, partly because it's on Python mailing lists we originally met... eventually leading to our falling in love and marrying, whence the heart-for-love (also looks a bit like a Y:-).

So our perceptions of things sometimes differ (which I think is part of makes us so good at co-authoring books -- complementary visions of an issue plus the ability to talk it out lovingly and come to a helpful consensus)...
 

"Sharing to help other users", not in response to specific technical questions, is not within this remit

Ok, but that's a kind of answers that are very, very precious for basic users (because they seems too obvious that nobody talks about it).

Very, but, alas, not suitable for Stack Overflow. Maybe the new "documentation" section -- still not familiar with it but seems different enough to be worth exploring in that vein.
 

I just finish by warmly thanking you for the million people you have helped, that's really something to be proud of ―more of anything. I also thank you for the kindness of your message.

I wish you the best, and greeting from the other stack universe: the wild west stack of the basic user!

(*You would have guess that the stack users I know aren't programmers either!)

Plenty of people aren't programmers but need to do some programming anyway to get their jobs done -- Anna got started hacking (originally in Visual Basic, then sensibly decided to get a better language) because IT's scheduling of her "I need this to get my job done" requests was measured in years, yet she KNEW (correctly) it could be done in weeks even by a non-programmer (would have been days for a programmer). If Stack Overflow is mistreating this huge audience, they need to be made aware of this -- perhaps on `meta` -- and start mending their ways!

Thanks for your constructive and friendly response,

Alex
 

--
You received this message because you are subscribed to the Google Groups "Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-appengine+unsubscribe@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at https://groups.google.com/group/google-appengine.

Alex Martelli

unread,
Mar 4, 2017, 10:04:12 PM3/4/17
to google-a...@googlegroups.com
On Sat, Mar 4, 2017 at 1:52 PM, Guillaume France <gc.c...@gmail.com> wrote:
Hi again Alex, I just found your email in the thread, the one you were talking about the raw= encoders.encode_base64(msg) .

I discovered that bug yesterday and commented that line (which correctly send the email ― without the attachment though, would have been too easy!). But I did not know what was wrong with this encoder (so many thing to understand in that code), so I thank you for your explanation.

You're welcome!
 

 I'm really impressed you helped me despite the italic line and above all: despite the fact I ended up in the wrong forum (it's embarrassing!) you are an amazing guy... 

*blush*:-)
 

So thanks a lot, I finally took the "risk"to face a downvote mob justice by posted it in stack. I'm also curious to see if it will be downvoted (so I could sue Google for that!)

Out of curiosity, could you please post the URL to your question? While not directly relevant to google cloud platform, it IS still the weekend, so, I might spend some of my own time seeing if I can help further there...!


Thanks,

Alex

 

--
You received this message because you are subscribed to the Google Groups "Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-appengine+unsubscribe@googlegroups.com.

To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at https://groups.google.com/group/google-appengine.

Guillaume France

unread,
Mar 5, 2017, 8:16:38 AM3/5/17
to google-a...@googlegroups.com
Just an evolutionary approach about Stack:
Since most Qs are basic, how could SO have become so popular if basic Qs were discouraged?!

Maybe because nobody invented (yet) anything better.

But actually I don't see any problem with Stack, but with Google who doesn't propose to his user a way to ask non welcomed stack question (of course my arguments doesn’t work if your perception of stack is true, that it welcomes "good questions", but it works with my perception of Stack : good question can be down-voted. And being downvoted while asking (a valid question) for support does not fit with the idea I have of a good customer service/support).

Anyway, I don't need to agree with you on that point to like you.

What an interesting guy you are ! I hope to have the chance to see you or your wife passing with your (red) Prius's license plate is P♥︎THON.

I'm passionate about this (you) kind of passionate people who burn themselves for their passion which in turn helps others. I feel honored to have talks with one of these python gods (the one who participate to this awesome tool).

Concerning your life achievement I wish I could download your knowledge... Maybe I will, if all the guys like you continue to do what they are doing! In the million people you helped, some might invent that kind of improvement. Who knows...

No, I won't give you the URL, you have already done too much. Billion users are waiting for you, and some of them to improve the world.

Thanks for who you are, and greeting to Anna which apparently share your values and your fecund goals

ps:

- yes, our docs (and in particular, product naming) could definitely be better,
Does that mean you work for Google? 
If yes, don't worry: nobody is perfect!
 

Reply all
Reply to author
Forward
0 new messages