|
|
Comments and Discussions
|
|
 |

|
Hello
I am using server as "smtp.gmail.com" and the port number is 587 but still iam getting the error message "Invalid Socket".
|
|
|
|

|
I downloaded a version of this library a while ago and noticed that closesocket() is never called in the FastSmtp::Disconnect() function or anywhere else. Eventually this will lead to problems. If you use this code you should add the closesocket() call before setting the socket handle to INVALID_SOCKET. Infact, the correct way to shutdown the socket would be more like:
shutdown(hSocket, SD_SEND);
closesocket(hSocket);
hSocket = INVALID_SOCKET;
// NULL is not a valid value for a socket handle
Otherwise, this class is pretty helpful!
|
|
|
|

|
I compiled the Code with an Eclipse project and got an exe-File.
This Program seems to run succesful and shows the message "Send was a success" at the end.
But the Test-emails does not reach my email-account at gmx (xxxxx@gmx.net)
As mail.ConnectServer() I tried "pentium3-1700" (the name of the used computer) and "pop.gmx.net"
Maybe the reason is that there is not possibility to define a user-name and a user-password as it is needed for normal email-accounts ?
|
|
|
|
|

|
Hi everybody!
I am new in network programming and i want a bit help....
I have stuck in function _connectServerSocket().
When i call the connect(), function returns SOCKET_ERROR,
and WSAGetLastError returns error code 10051.
I have tried this with various servers and various ports
(although the correct port for sending mail is 25),
and always i get the same error...
Does anybody knows how can i fix this?
|
|
|
|

|
Sorry to bother you, but I am quite newly to connection protocol stuff...
I can't make work well the _connectServerSocket function.
If I set the port (=25) it says "Invalid Socket": the nConnect parameter is set to -1 by the function
nConnect = connect(hServerSocket,(PSOCKADDR)&sockAddr,sizeof(sockAddr));
while if I don't set the port it gets the port number from the line
nProtocolPort = lpServEnt->s_port;
and it always sets the port equal to 6400 (indipendently from the server I am using: smtp.gmail.com, out.alice.it, my company webmail, etc.) and so it doesn't fail by saying "Send was a success!", but it doesn't really work: I can't get any mail!!
What can I do?
Thanks in advance for your help,
Adriana
|
|
|
|

|
I had the same problem as you. We also do not use port 25 in our company.
TongGao Tang gave me the hint to solve this problem in his answer:
Change the command
if (port != NULL)
nProtocolPort = port;
int the function _connectServerSocket to
if (port != NULL)
nProtocolPort = htons(port);
and you can use the regular ports when calling ConnectServer.
With this change it worked for me.
|
|
|
|

|
Full of errors, most of them are because of violating basic C language structure.
How come this man can call himself a programmer?
No download link and poor page design.
|
|
|
|

|
It's full of bug.
There is possibly some memory leak.
There is no explanation of how it works.
|
|
|
|

|
Full of errors, most of them are because of violating basic C++ language structure. I think he didn't compiled this code even once before publishing it.
How come this man can call himself a programmer?
No download link for source code, poor page design.
|
|
|
|

|
In the CFastSmtp::Send() method, when sending CC and BCC recipients, there is Copy/Paste error in lines 234 and 252.
The code is looping on CCRecipients and BCCRecipients lists and we found token = strtok(Recipients.at(i)->GetEmail(),"<");
I changed them in token = strtok(CCRecipients.at(i)->GetEmail(),"<"); and token = strtok(BCCRecipients.at(i)->GetEmail(),"<"); to get CC and BCC recipients working.
The use of strtok is also destructive. Another function may have been a better choice (like strchr or strrchr)...
Personaly, I replaced the code : token = strtok(Recipients.at(i)->GetEmail(),"<");
token = strtok(NULL,"<");
if (token == NULL)
token = strtok(Recipients.at(i)->GetEmail(),"<");
strcpy(buf, "RCPT TO: <");
strcat(buf, token);
strcat(buf, "\r\n");
by this one : token = strrchr(Recipients.at(i)->GetEmail(),'<');
strcpy(buf, "RCPT TO: ");
strcat(buf, token);
strcat(buf, "\r\n");
idem for CC and BCC parts.
It's horribly coded!
|
|
|
|

|
gmail use SSL or TSL, this class can support?
You Suffer,But Why?
|
|
|
|

|
i guess no...
this doesn't even support plain auth (base64 encoding)...
From Indonesia with love..!!
|
|
|
|

|
Just wanted to say thanks for this useful class
See ya
|
|
|
|

|
Locale settiongs for code:
::GetDateFormat(LOCALE_SYSTEM_DEFAULT,0,&st,"ddd',' dd MMM yyyy",szDate,sizeof(szDate));
::GetTimeFormat(LOCALE_SYSTEM_DEFAULT,TIME_FORCE24HOURFORMAT,&st, "HH':'mm':'ss tt",sztTime,sizeof(sztTime));
provoke error for russian locales - smtp server need English language identifier
use for it MAKELCID(0x409, SORT_DEFAULT)
|
|
|
|

|
CFastSmtp mail;
if (mail.ConnectServer("mail.yahoo.com"))
{
mail.SetSenderName("Amit");
mail.SetSenderEmail("sunnysearch@yahoo.com");
mail.SetSubject("CFastSmtp v1.1 Release");
mail.AddRecipient("sunnysearch@yahoo.com");
mail.AddCCRecipient("sunnysearch@yahoo.com");
mail.AddBCCRecipient("sunnysearch@yahoo.com");
mail.SetMessageBody("Here is another test of CFastSmtp SMTP class!");
if (mail.GetConnectStatus())
{ if( mail.Send() )
AfxMessageBox("Send was a success!" );
else
AfxMessageBox("Send failed!");
mail.Disconnect();
}
else
AfxMessageBox("not Connected!");
}
else
AfxMessageBox("Put Server Name");
Its always give me "Invalid socket" and "Put Server Name" message
I think port problem is der?
Can anyone plz put d sample calling sequence
|
|
|
|
|

|
Hello,
Looking for this exact thing but in VS.Net.
Any one have an idea when I can find a version of this for .net?
Thanks
|
|
|
|

|
When you say VS.NET ... do u mean in C#? I compiled this with VS 2003 and 2005 .. works fine.
|
|
|
|

|
Your code works very very well....And i am sorry for the rest of the idiots in this forum who cant pay a compliment for a job well done. Instead, they spew their cheap thoughts on how you should use STL or this or that.....JUST ENJOY THE CODE, USE IT...It works. Dont threw in our faces the latest crap you read in a trade magazine.
|
|
|
|

|
if (mail.ConnectServer("mail.hotmail.com")) {
mail.SetSenderName("test");
mail.SetSenderEmail("test@hotmail.com");
mail.SetSubject("test");
mail.AddRecipient("test@hotmail.com");
mail.AddCCRecipient("test@hotmail.com");
mail.AddBCCRecipient("test@hotmail.com");
mail.SetMessageBody("test mail");
if (mail.GetConnectStatus()) {
TRACE(mail.Send() ? "Send was a success!" : "Send failed!");
mail.Disconnect();
}
}
I Writed this code Sample...but Not Work...
Result is "Send was a success" ... but none recieved mail...
help me...
test@hotmail.com is Sample...Real mail is others...
-- modified at 3:59 Friday 25th May, 2007
|
|
|
|

|
This program is very small and nice.
I have the same question as Ahsan said before:
1) What name should we provide for SMTP server? (I want to send email from this address ahsan_1358@hotmail.com)
2) Which port should we use to we connect to SMTP server (port 25? / htons(25)?/ NULL).
3) How can we know about SMTP server for any emailing address(or if you can tell me about ahsan_1358@hotmail.com's SMTP server name).
Thanks,
TongGao Tang
TongGao Tang
|
|
|
|

|
Try to get the exchage (mail server name) by
(Method 1) Can try the program in "DNS Query":
file:///H:/Project%20Sending%20Mail/Good%20DNS%20Query%20ns%20not%20MX/dnsquery.asp.htm
to get exchange "a.mx.mail.yahoo.com"(i.e.mail server name) from domain "yahoo.com"
(Method 2) Can try can use the program in "DNS Resolver RFC 1035":
file:///H:/Project%20Sending%20Mail/DNS%20Resolver%20RFC%201035%20RFC%201035/akashkavadnsresolver.asp.htm
to get exchange name "a.mx.mail.yahoo.com" (i.e.mail server name) "from yahoo.com"
In the Method 2. You shoul change the text "qinfo->qtype = htons(1);"(only for host address)
to be qinfo->qtype = htons(15);" (it is for mail information).
I feel the Method 2 more good than Method 1. The Method 2 can get
exchange "host1.boom.ru" from "soft.boom.ru"
Tong-Gao Tang
tonggaotang@hotmail.com
TongGao Tang
|
|
|
|
|

|
It is more correct to use ATL "SetRfc822Time" (C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlmime.h) function for setting mime "Date: " field.
Best regards
Roman
|
|
|
|

|
This code could have been just what I am looking for, but...
1. There is no demo app for us to play around with.
2. There is no downlaodable source code.
3. There is no description of how it works (smells like a copy)
4. The code has not been updated with bug fixes (see other comments below)
5. It is only ANSI compatible (no UNICODE or MBCS support)
6. There are more comments written on the bottom of my shoe!
These gets a 1 from me.
|
|
|
|

|
It's useful, I agree, but the code is just ugly...
First, using OOP is a great thing!
Second, the code is very error-prone. Raw C string and arrays... Use STL instead!
|
|
|
|

|
I have the code working but while I was trying to build it I got an error...
SYSTEMTIME st={0};
::GetSystemTime(&st);
::GetDateFormat(LOCALE_SYSTEM_DEFAULT,0,&st,"ddd',
' dd MMM yyyy",szDate,sizeof(szDate));
::GetTimeFormat(LOCALE_SYSTEM_DEFAULT,TIME_FORCE24HOURFORMAT,&st,
"HH':'mm':'ss tt",sztTime,sizeof(sztTime));
Visual Studio 6.0 didnt like the code "ddd', 'dd MMM yyyy" so I had to change it to "dd MMM yyyy".
Otherwise works great for me.
Chris
|
|
|
|

|
two mistakes:
1. before AUTH, app should send EHLO, right?
I add the EHLO command and passed authentication, but..
2.After server tells me "Authentication successful", server disconnects with me immediately, what's the matter?
Can you enlighten me in the second issue?
|
|
|
|

|
Hello,
I am a newbie in mail programming. I have been using web-based mailing earlier(Yahoo, Hotmail). I want to send a mail using C++ program, I have working knowledge of socket programming(Winsock). I compiled the above program using VC++(6.0) Win32 console-based program, it runs but I am not yet able to connect to SMTP server(_connectServerSocket(char * ,char *) always returns INVALID_SOCKET).
There could be a number of reasons for it. I want your help to solve them. Especially from those who succeeded in sending mail using Fast SMTP.
1) What name should we provide for SMTP server? (I want to send email from this address ahsan_1358@hotmail.com)
2) Which port should we use to we connect to SMTP server (port 25 / htons(25) / NULL).
3) How can we know about SMTP server for any emailing address(or if you can tell me about ahsan_1358@hotmail.com's SMTP server name).
I am looking forward for answers from the coding gurus of this site.
P.S. If you know of any free e-book that is helpful regarding this topic. Plz share it with me.
Learn to Teach
|
|
|
|

|
Try to get the exchage (mail server name) by
(Method 1) You try the program in "DNS Query":
file:///H:/Project%20Sending%20Mail/Good%20DNS%20Query%20ns%20not%20MX/dnsquery.asp.htm
to get exchange "a.mx.mail.yahoo.com"(i.e.mail server name) from domain "yahoo.com"
(Method 2) You try can use the program in "DNS Resolver RFC 1035":
file:///H:/Project%20Sending%20Mail/DNS%20Resolver%20RFC%201035%20RFC%201035/akashkavadnsresolver.asp.htm
to get exchange name "a.mx.mail.yahoo.com" (i.e.mail server name) "from yahoo.com"
In the Method 2. You shoul change the text "qinfo->qtype = htons(1);"(only for host address)
to be qinfo->qtype = htons(15);" (it is for mail information).
I feel the Method 2 more good than Method 1. The Method 2 can get
exchange "host1.boom.ru" from "soft.boom.ru"
Tong-Gao Tang
tonggaotang@hotmail.com
TongGao Tang
|
|
|
|

|
I dunno what is the intention of the _connectServerSocket function when you give it a port number other than 0, but I think that if you get the port from a configuration file that can be edited by a user, the user will rather enter 25 than 6400, because he has no idea that he has to change the byte order of the SMTP port he wants to use. So I think that we should read
if (port != NULL)
{
nProtocolPort = htons(port);
}
instead of the simple assignation "nProtocolPort" = port;
|
|
|
|

|
I embedded your code in my Borland C++ Builder. Works fantastic. Thanks so much, you saved me lots of time.
I saw someone posting code having AUTH and base64 code. It is fine but I embedded the bas64 code into your class. If you need a copy let me know please. There is a tweak to use in Borland that I will gladly share (the winsock.h vs winsock2.h).
Again, thanks so much!
J. Rivero
|
|
|
|
|

|
Hi! You write:
bool CFastSmtp::AddRecipient(const char email[], const char name[])
{
assert(email);
int s=strlen(email);
if (s==0)
return false;
CRecipient *pRec = new CRecipient();
char *pcBuf = new char[s+strlen(name)+4];
sprintf(pcBuf,"%s<%s>",name,email);
pRec->SetEmail(pcBuf);
Recipients.insert(Recipients.end(), pRec);
//!!!!!! delete pcBuf;
delete [] pcBuf;
return (true);
}
|
|
|
|

|
sir,
Actually what this smtp and pop3. is it means by using this we can send mails and receive mails. means what ever we are doing with InternetExplorer by opening with www.mail.yahoo.com and giving username and password and sending mails to friends. i.e now with out using this IE by using this program we can directly send mails to friends and received. is correct. please inform me.
Thanks in Advance.
|
|
|
|

|
FastSmtp.cpp(611) : fatal error C1010: unexpected end of file while looking for precompiled header directive
|
|
|
|

|
FastSmtp.cpp
\FastSmtp.cpp(60) : error C2374: 'n' : redefinition; multiple initialization
\FastSmtp.cpp(58) : see declaration of 'n'
\FastSmtp.cpp(62) : error C2374: 'n' : redefinition; multiple initialization
\FastSmtp.cpp(58) : see declaration of 'n'
\FastSmtp.cpp(224) : error C2374: 'i' : redefinition; multiple initialization
\FastSmtp.cpp(206) : see declaration of 'i'
\FastSmtp.cpp(225) : error C2227: left of '->GetEmail' must point to class/struct/union
\FastSmtp.cpp(228) : error C2227: left of '->GetEmail' must point to class/struct/union
\FastSmtp.cpp(242) : error C2374: 'i' : redefinition; multiple initialization
\FastSmtp.cpp(206) : see declaration of 'i'
\FastSmtp.cpp(243) : error C2227: left of '->GetEmail' must point to class/struct/union
\FastSmtp.cpp(246) : error C2227: left of '->GetEmail' must point to class/struct/union
\FastSmtp.cpp(418) : error C2001: newline in constant
\FastSmtp.cpp(419) : error C2001: newline in constant
\FastSmtp.cpp(419) : error C2015: too many characters in constant
\FastSmtp.cpp(419) : error C2143: syntax error : missing ')' before 'constant'
\FastSmtp.cpp(419) : error C2660: 'GetDateFormatA' : function does not take 4 parameters
Error executing cl.exe.
mysock.exe - 13 error(s), 0 warning(s)
|
|
|
|

|
These are easy fixes: VC6 does not allow redefining variables in for loops within a single function. Just rename the variables in the second for loop to n2, the same thing with the 'i' redefs, use i1, i2, i3, etc... (be sure to change all references to the variable.
The newline errors are a result of copy/paste, just delete the newline so the code is on a single line (wordwrap is OK).
The rest of the errors should disappear once you fix these.. at least they did for me.
Also, you must add ws2_32.lib to the Object/Library Modules edit box in the Project/Settings/Link tab.
In business, if two people always agree, one of them is unnecessary.
|
|
|
|

|
Hi!
Are there any license issues on CFastSmtp or are we allowed to use it in commercial applications?
Kind regards,
peter
|
|
|
|

|
Please, correct it. Add to the function Disconnect next strings:
shutdown(hSocket,0x02);
closesocket(hSocket);
Ok.
Neuro
|
|
|
|

|
Why is shutdown(hSocket, 0x02) necessary. Seems to me that this might prevent reconnection to a socket. It seems to me that closesocket() should be adequate for memory management purposes. Am I missing something here?
In business, if two people always agree, one of them is unnecessary.
|
|
|
|

|
Hi ,
I would like to know what makes this package a *fast* smtp class?
I haven't seen any synchronization code here and i'm wandering if this code is thread safe?
can you open multiple connections to a mail server on the same time without connection collisions ? if so do you have to specify diffrent port for each thread ?
please advise,
DaberElay.
|
|
|
|

|
Is it possible to send html mails using CFastSmtp?
regs,
Stephan
|
|
|
|

|
Yes, in the _formatHeader(), replace:
strcat(msgHeader, "MIME-Version: 1.0\r\nContent-type: text/plain; charset=US-ASCII\r\n");
with:
strcat(msgHeader, "MIME-Version: 1.0\r\nContent-type: text/html\r\nContent-Transfer-Encoding: quoted-printable\r\n");
Hugh
|
|
|
|

|
Although it's better to use:
strcat(msgHeader, "MIME-Version: 1.0\r\nContent-type: multipart/alternative;\r\n\tboundary=\"----=_NEXTPART_000\"\r\n");
and then format your message as below:
This is a multi-part message in MIME format.
------=_NEXTPART_000
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hi there,
This is the alternative (plaintext) version of this email.
Regards,
John A. Doe
------=_NEXTPART_000
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<HTML>
<BODY>
<p>Hi there,
<p>This is the primary (HTML) version of this email.
<p>Regards,
<p>John A. Doe
</BODY></HTML>
------=_NEXTPART_000--
This is the preferred method, since in the event a user receives your email on a client that doesn't accept HTML, they will have a plaintext alternative to read, otherwise they either receive a blank screen or they see the actual HTML code (depending on the client).
Just a couple things to note: 1) use a boundary identifier that is unique enough it won't chance being duplicated in any email text, and 2) note that each boundary line in the body is prefaced by two additional dashes '--' and the closing boundary is ended with two dashes.
In business, if two people always agree, one of them is unnecessary.
|
|
|
|

|
I try to use this clas and when build the project the liker shows following:
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__recv@16
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__send@16
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__connect@12
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__htons@4
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__getservbyname@8
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__socket@12
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__gethostbyname@4
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__inet_ntoa@4
FastSmtp.obj : error LNK2001: unresolved external symbol __imp__gethostname@8
D
Anybody can help me?
Thacks in advance
|
|
|
|

|
Me too, but I don't know what to do too
|
|
|
|

|
Use Ws2_32.lib can solve this problem
|
|
|
|

|
Add "ws2_32.lib" to the linker arguments!
|
|
|
|
 |
|
|
General News Suggestion Question Bug Answer Joke Rant Admin
|
Fast and simple win32 SMTP class with handy local ip/name funtions
| Type | Article |
| Licence | |
| First Posted | 25 Jun 2000 |
| Views | 265,322 |
| Bookmarked | 102 times |
|
|