Ticket UUID: | 1430694 | |||
Title: | smtp or socket issue causes error 400 in Windows XP Pro | |||
Type: | Bug | Version: | None | |
Submitter: | guitarzar | Created on: | 2006-02-13 14:45:03 | |
Subsystem: | smtp | Assigned To: | patthoyts | |
Priority: | 7 High | Severity: | ||
Status: | Closed | Last Modified: | 2013-07-04 17:25:40 | |
Resolution: | Not Applicable Here | Closed By: | guitarzar | |
Closed on: | 2006-05-15 15:34:33 | |||
Description: |
I thought I had submitted this back in 2005 but I do not see it in the bug database so I am sumbitting again. I am using tcllib mime and smtp to send email from a tcl tool. Unfortunately, it seems that a socket error is being thrown if the body size gets beyond around 10KB. I'm unsure if it's a socket issue or a tcllib issue. It seems to be consistent as I have tried this with 3 different body texts. I already sumbitted this to ActiveState and they referred me over here. Please see the submission on ActiveStates bug system. The bug ID is 42067. I have upload several files there. I would really appreciate it if you guys could take a look at this. Thanks, Robert Joy | |||
User Comments: |
dunkfan added on 2006-11-03 21:32:08:
Logged In: YES user_id=1183601 FWIW, this bug has just appeared after an upgrade to tcllib-1.9 tcllib-1.8 was/is working fine so I'll stick with it for the moment. System Win XP PRO SP2, iocpsock does not improve the situation. (tcl 8.4.13) Code is as follows: set token [mime::initialize -canonical text/plain -string $body] catch {smtp::sendmessage $token \ -recipients $recipient\ -header [list From $from]\ -header [list To $recipient]\ -header [list Subject $subject]\ -servers $email_server -usetls 0} error mime::finalize $token guitarzar added on 2006-08-30 23:11:30: Logged In: YES user_id=1373320 This issue was not resolved. It appeared that it was working because I move from the standard socket to the iocpsock package which allowed a larger portion of the email to be sent before something went wrong. I did some more testing and here's what I discovered: I went into the the smtp package and disabled the trf package call. This allowed me to send large emails and attachments but I was not happy with this solution so I poked around some more and found that the tls package was not installed on my system. I assumed everything needed was there since I'm using ActiveTcl from ActiveState. Those guys are usually pretty good about including everything but I've since been informed that the package was excluded from ActiveTcl due to export restrictions on the crypt stuff. Second, if I send an email WITH "-usetls true" the mail sends just fine (this is how Pat Thoyts was sending his emails). However, when I send emails with "-usetls false" it fails miserably and I get the dreaded iocpsock/sock error! I'd like to see if you can send a large email soemthing in the neighborhood of 1MB with the -usetls set to false. There's obviously still something wrong with the way the smtp package is handling the trf stuff. guitarzar added on 2006-05-15 22:34:33: Logged In: YES user_id=1373320 This issue was resolved for me by Pat Thoyts. It turned out to be an problem with the TCLs standard socket implementation. Here's the solution: One last thing I thought of is there is an alternative socket implementation for Tcl on windows - the iocpsock extension provides a socket2 command. It was written as a performance enhanced socket layer and uses the winsock APIs rather than the BSD socket APIs. There is a slight chance this might produce a different result for you. You would use it by doing: package require Iocpsock interp alias {} socket {} socket2 nobody added on 2006-05-15 21:22:19: Logged In: NO In addition to my previously post. Just tested the setup thru sockspy, and the error didnt occur. This could look like some socket issue in the smtp package code. Rgds Jesper nobody added on 2006-05-15 18:21:18: Logged In: NO I get the same error when sending mail attatchments bigger than 6-7 kb. The smtp package stops the base64 encoded part, sends a newline and a dot, then RSET and QUIT. (no ending boundry) The error message is "400: error writing "sock244": invalid argument" Here, a ethereal dump of the end of the conversation with mail server: <dump> dWJ0eXBlL1RydWVUeXBlPj4KZW5kb2JqCjI1IDAgb2JqCjw8L1R5cGUvRW5j b2RpbmcvQmFzZUVu Y29kaW5nL1dpbkFuc2lFbmNvZGluZy9EaWZmZXJlbmNlc1sKMS9qL . RSET QUIT 250 198182198 mailfe02 Message accepted for delivery 250 SMTP state reset 221 mailfe02.swip.net SMTP closing connection </dump> Looks like smtp tries to send rest of the data, but allready has closed the connection. Rgds. Jesper patthoyts added on 2006-04-22 06:06:01: Logged In: YES user_id=202636 Using information contained in your attachment I have sent myself the mime.tcl file (108K) using your script on a Windows XP machine and sending via your server. In all cases I have got the full file. I'll separately mail you some extra bits. guitarzar added on 2006-04-21 23:39:16: Logged In: YES user_id=1373320 Oh, one more thing, the path you gave to the example smtp server does not exist on my install of ActiveTcl 8.4.11.2 guitarzar added on 2006-04-21 23:23:16: File Added - 175369: smtp-error.txt guitarzar added on 2006-04-21 23:23:09: Logged In: YES user_id=1373320 Ok, seems I left out something. I am sending the email through an external email server owned by a reputable hosting company. I believe this may effect the outcome. So I am re-opening this report and adding some new info. I have attached a file that contains the smtp dump after turning on the -debug flag, a code snippet used to send the message and the tcl result error. Also, the mail gets sent but it's truncated to something less than 10KB. Also, the machine that is running my program is the same machine that I use for my personal email client (Thunderbird). It works just fine for sending large email bodies. Please let me know what you think. You might also try sending a message to an external server and see what you get. Please make sure to use a large file and ensure that received file is approximately the same size. My test file was 52KB. Thanks Patt patthoyts added on 2006-04-21 19:19:53: Logged In: YES user_id=202636 I believe this is actually a problem on your server. The script provided works fine (although you should add the following lines to get the To and From headers added) set from "\"$fullname\" <$emailaddr>" mime::setheader $token From $from mime::setheader $token To $to I have tried this using the files you attached to the ActiveState bug on a Microsoft SMTP server and on Postfix (on Linux) and both worked ok. If you want to test this yourself locally I suggest you add -debug 1 to the options for smtp::sendmessage. This gets it to record the SMTP conversation to stderr. You might also try the sample smtp server that is part of tcllib itself. If you start the example server (wish tcllib\examples\smptd\tk_smtpd) and set the port number to 25 you can ue your script and send mail to localhost as the server. This way you can see both sides of the conversation. It's possible that your server is using the SIZE extension and limiting SIZE to something very small. I am going to close this as works for me - but reopen if you have more information to add. patthoyts added on 2006-04-21 18:28:42: Logged In: YES user_id=202636 The AS bug: http://bugs.activestate.com/show_bug.cgi?id=42067 |
Attachments:
- smtp-error.txt [download] added by guitarzar on 2006-04-21 23:23:14. [details]