Visual c++ 如何在vc 6.0中使用smtp附加txt文件

Visual c++ 如何在vc 6.0中使用smtp附加txt文件,visual-c++,mfc,smtp,visual-c++-6,Visual C++,Mfc,Smtp,Visual C++ 6,我们能够发送简单的电子邮件。但是我们需要在vc 6.0中使用smtp发送带有文件附件的电子邮件 bool SendMail() { if (!ValidateEnvelope(sendmail.host, sendmail.recip, sendmail.sender, &sendmail.IP)) return false; char tmp[255]; if (sendmail.sender=="" || sendmail.recip=="" || sendmai

我们能够发送简单的电子邮件。但是我们需要在vc 6.0中使用smtp发送带有文件附件的电子邮件

bool SendMail()
{
if (!ValidateEnvelope(sendmail.host, sendmail.recip, 
    sendmail.sender, &sendmail.IP)) return false;

char tmp[255];
if (sendmail.sender=="" || sendmail.recip=="" ||
    sendmail.body=="" || sendmail.subject=="") return false;

sendmail.hSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sendmail.hSocket==SOCKET_ERROR) return false; 

if (!ConnectTo())
{
    printf("Unable to connect to the server.\n");
    return false;
}
snd("HELO", true);

sprintf(tmp, "%s%s%s", "MAIL FROM:<", sendmail.sender, ">");
snd(tmp, true);
sprintf(tmp, "%s%s%s", "RCPT TO:<", sendmail.recip, ">");
snd(tmp, true);

sprintf(tmp, "%s%s%s", "MAIL FROM:<", sendmail.sender, ">");
snd(tmp, true);
sprintf(tmp, "%s%s%s", "RCPT TO:<", sendmail.recip, ">");
snd(tmp, true);
snd("DATA", true);
sprintf(tmp, "%s%s", "From: ", sendmail.sender);
snd(tmp, false);
sprintf(tmp, "%s%s", "To: ", sendmail.recip);
snd(tmp, false);
sprintf(tmp, "%s%s", "Subject: ", sendmail.subject);
snd(tmp, false);
snd("", false);
snd(sendmail.body ,false);
snd(".", true);

snd("NOOP", true);
snd("QUIT", true);
closesocket(sendmail.hSocket);

return true;
}
bool SendMail()
{
如果(!ValidateEnvelope(sendmail.host、sendmail.recip、,
sendmail.sender和&sendmail.IP)返回false;
char-tmp[255];
如果(sendmail.sender==“”| | sendmail.recip==“”||
sendmail.body==“| | sendmail.subject==”)返回false;
hSocket=socket(AF_INET、SOCK_STREAM、IPPROTO_TCP);
if(sendmail.hSocket==SOCKET\u ERROR)返回false;
如果(!ConnectTo())
{
printf(“无法连接到服务器。\n”);
返回false;
}
snd(“HELO”,真实);
sprintf(tmp,“%s%s”,“邮件发件人:”);
snd(tmp,真实);
sprintf(tmp,“%s%s%s”,“RCPT TO:”;
snd(tmp,真实);
sprintf(tmp,“%s%s”,“邮件发件人:”);
snd(tmp,真实);
sprintf(tmp,“%s%s%s”,“RCPT TO:”;
snd(tmp,真实);
snd(“数据”,真实);
sprintf(tmp,“%s%s”,“发件人:”,sendmail.sender);
snd(tmp,假);
sprintf(tmp,“%s%s”,“收件人:”,sendmail.recip);
snd(tmp,假);
sprintf(tmp,“%s%s”,“主题:”,sendmail.Subject);
snd(tmp,假);
snd(“,假);
snd(sendmail.body,false);
snd(“.”,真实);
snd(“NOOP”,真实);
snd(“退出”,正确);
closesocket(sendmail.hSocket);
返回true;
}
如何附加上述代码中的文件。
提前谢谢。

我建议您使用标准库


否则,请从项目中复制所需的代码。

为什么不像下面这样使用简单的MAPI:

    HINSTANCE hlibMAPI;
    LPMAPISENDMAIL lpMAPISendMail;
    MapiMessage msg;
    MapiRecipDesc recipient, sender;

    hlibMAPI = LoadLibrary("MAPI32.DLL");
    if (!hlibMAPI)
    {
        AfxMessageBox("Error while sending E-Mail: Can't load MAPI32.DLL");
        return;
    }

    lpMAPISendMail= (LPMAPISENDMAIL)GetProcAddress(hlibMAPI, "MAPISendMail");
    if (!lpMAPISendMail)
    {
        AfxMessageBox("Error while sending E-Mail: Can't locate function 'MAPISendMail' in 'MAPI32.DLL'");
        return;
    }

    long l = 123456;
    unsigned long ul;

    sender.ulReserved = NULL;   
    sender.ulRecipClass = MAPI_ORIG; 
    sender.lpszName = "generic"; 
    sender.lpszAddress = "SMTP:generic@sender.org";  
    sender.ulEIDSize = 4; 
    sender.lpEntryID = &l;    

    recipient.ulReserved = NULL;   
    recipient.ulRecipClass = MAPI_TO; 
    recipient.lpszName = "dummy recipient"; 
    char eadr[200];
    strcpy(eadr, "SMTP:dummy@recipient.org");
    recipient.lpszAddress = eadr;  
    recipient.ulEIDSize = 4; 
    recipient.lpEntryID = &l;    

    // setup message body
    msg.ulReserved = NULL;      
    msg.lpszSubject = "sample subject";      
    msg.lpszNoteText = "sample text";      
    msg.lpszMessageType = NULL; 
    msg.lpszDateReceived = "2013/10/31 00:00"; 
    msg.lpszConversationID = NULL;      
    msg.flFlags = MAPI_RECEIPT_REQUESTED;      
    msg.lpOriginator = &sender; 
    msg.nRecipCount = 1;      
    msg.lpRecips = &recipient;      
    msg.nFileCount = 0;   /// <-- use this to attach your file
    msg.lpFiles = NULL;   //         

    ul = (*lpMAPISendMail)(NULL, (ULONG)AfxGetMainWnd(), &msg, MAPI_LOGON_UI, NULL);
    FreeLibrary(hlibMAPI);

    switch (ul)
    {
    case MAPI_E_LOGIN_FAILURE:
        AfxMessageBox("Error while sending E-Mail: Coldn't login");
        return;

    case MAPI_E_INSUFFICIENT_MEMORY:
        AfxMessageBox("Error while sending E-Mail: There was insufficient memory to send the e-mail");
        return;

    case MAPI_E_USER_ABORT:
        AfxMessageBox("User canceled mail creation");
        return;

    case SUCCESS_SUCCESS:
        AfxMessageBox("E-mail was sent successfully");
        break;

    default:
        AfxMessageBox("Unknown error while sending E-Mail");
        return;
    }
HINSTANCE hlibMAPI;
LPMAPISENDMAIL LPMAPISENDMAIL;
mapimessagemsg;
MapRecipDesc收件人、发件人;
hlibMAPI=LoadLibrary(“MAPI32.DLL”);
如果(!hlibMAPI)
{
AfxMessageBox(“发送电子邮件时出错:无法加载MAPI32.DLL”);
返回;
}
lpMAPISendMail=(lpMAPISendMail)GetProcAddress(hlibMAPI,“MAPISendMail”);
如果(!lpMAPISendMail)
{
AfxMessageBox(“发送电子邮件时出错:在“MAPI32.DLL”中找不到函数“MAPISendMail”);
返回;
}
长l=123456;
无符号长ul;
sender.ulReserved=NULL;
sender.ulRecipClass=MAPI_ORIG;
sender.lpszName=“通用”;
sender.lpszAddress=“SMTP:generic@sender.org";  
sender.ulEIDSize=4;
sender.lpEntryID=&l;
recipient.ulReserved=NULL;
recipient.ulRecipClass=MAPI_TO;
recipient.lpszName=“虚拟收件人”;
char-eadr[200];
strcpy(eadr,“SMTP:dummy@recipient.org");
recipient.lpszAddress=eadr;
recipient.ulEIDSize=4;
recipient.lpEntryID=&l;
//设置消息正文
msg.ulReserved=NULL;
msg.lpszSubject=“样本主题”;
msg.lpszNoteText=“示例文本”;
msg.lpszMessageType=NULL;
msg.lpszDateReceived=“2013/10/31 00:00”;
msg.lpszConversationID=NULL;
msg.flFlags=请求的MAPI\u收据;
msg.lpOriginator=&sender;
msg.nRecipCount=1;
msg.lpRecips=&recipient;

msg.nFileCount=0;///谢谢你的回复,托梅尔。。。你能分享完整的代码吗。。。因为它显示了很多错误,我不知道它是什么?示例“error C2065:“LHANDLE”:未声明的标识符错误C2275:“ULONG”:非法使用此类型作为表达式确保您有#included。我认为它使用outlook。。。。我不想使用outlook。用SMTP附加文件还有其他方法吗?别傻了。。。你认为它为什么使用Outlook?我还没有在这里安装Outlook,它工作正常。如果您不想使用像MAPI32.DLL这样的库,我建议您在网上查找SMTP代码并从头开始。对不起。。。现在我收到“lpfnMAPISendMail”:未声明的标识符错误。。。有什么帮助吗?我需要smtp来附加文件