我正在使用VS2008 & C + +我試圖創建一個命令行程序發送電子郵件。
我看了一下,發現了一些示例程序,但沒有人會爲我編譯。
有沒有人有我的例子程序? 感謝命令行C++程序發送電子郵件
回答
此代碼編譯&運行我 - 找出正確的標題等。還有需要命令行操作,並使用MAPI庫已過時,但後你想要什麼免費的?從codeproject.com
#include "windows.h"
#include "tchar.h"
#include "mapi.h"
#include "assert.h"
#define ASSERT assert
#define VERIFY assert
BOOL SendMail(CHAR *lpszFrom, CHAR *lpszTo, CHAR *lpszSubject, CHAR *lpszMessage)
{
BOOL bSent = FALSE;
HINSTANCE hMAPI = ::LoadLibrary(_T("mapi32.dll"));
if(0==hMAPI) return bSent;
typedef ULONG (FAR PASCAL *PFN_MAPILogon)(ULONG,LPTSTR,LPTSTR,FLAGS,ULONG,LPLHANDLE);
typedef ULONG (FAR PASCAL *PFN_MAPISendMail)(LHANDLE,ULONG,lpMapiMessage,FLAGS,ULONG);
typedef ULONG (FAR PASCAL *PFN_MAPILogoff)(LHANDLE,ULONG,FLAGS,ULONG);
PFN_MAPILogon MAPILogon = (PFN_MAPILogon)::GetProcAddress(hMAPI,"MAPILogon");
PFN_MAPISendMail MAPISendMail = (PFN_MAPISendMail)::GetProcAddress(hMAPI,"MAPISendMail");
PFN_MAPILogoff MAPILogoff = (PFN_MAPILogoff)::GetProcAddress(hMAPI,"MAPILogoff");
const BOOL bFunctionsLoaded = (0!=MAPILogon)&&(0!=MAPISendMail)&&(0!=MAPILogoff);
ASSERT(bFunctionsLoaded);
if(bFunctionsLoaded)
{
LHANDLE session = 0;
VERIFY(SUCCESS_SUCCESS==MAPILogon(0,0,0,MAPI_NEW_SESSION,0,&session));
ASSERT(0!=session);
MapiRecipDesc recipient;
::ZeroMemory(&recipient,sizeof(recipient));
recipient.ulRecipClass = MAPI_TO;
recipient.lpszName = lpszTo;
MapiMessage message;
::ZeroMemory(&message,sizeof(message));
message.lpszSubject = lpszSubject;
message.lpszNoteText = lpszMessage;
message.nRecipCount = 1;
message.lpRecips = &recipient;
bSent = SUCCESS_SUCCESS == MAPISendMail(session,0,&message,0,0);
VERIFY(SUCCESS_SUCCESS==MAPILogoff(session,0,0,0));
}
::FreeLibrary(hMAPI);
return bSent;
}
int _tmain(int argc, _TCHAR* argv[])
{
SendMail("[email protected]_daddy.com","[email protected]","Test subject","New Message");
return 0;
}
這工作!不過,它確實提醒我允許程序發送電子郵件。我通過安裝來解決這個問題點擊是http://www.contextmagic.com/express-clickyes/由於我的程序將在內部PC上運行,所以安裝此軟件不會有問題。 – Rossini 2010-10-11 12:01:27
是的 - 這是因爲這是使用MAPI服務器在PC上發送郵件。有一些不使用MAPI的替代解決方案,所以您可以稍後查看 - – Jeff 2010-10-11 14:43:05
@Jeff你知道爲什麼我在ASSERT(bFunctionsLoaded)行中得到「assert is not defined」嗎? ? 謝謝 – CMS 2014-02-18 09:33:34
感謝您的鏈接,但我有點希望一個簡單的命令行程序,我可以很容易理解,所以我可以在我的程序中使用相同的邏輯。 – Rossini 2010-10-07 12:23:19
原始代碼,因爲你的服務器是兌換,你最方便的方法來編寫程序的電子郵件將使用C#和System.Net.Mail作爲證明here發送。這裏是C++/CLI代碼:
static void CreateTestMessage2(String^ server)
{
String^ to = L"[email protected]";
String^ from = L"[email protected]";
MailMessage^ message = gcnew MailMessage(from,to);
message->Subject = L"Using the new SMTP client.";
message->Body = L"Using this new feature, you can send an e-mail message from an application very easily.";
SmtpClient^ client = gcnew SmtpClient(server);
// Credentials are necessary if the server requires the client
// to authenticate before it will send e-mail on the client's behalf.
client->UseDefaultCredentials = true;
client->Send(message);
client->~SmtpClient();
}
如果你真的想用本地C++,那麼你被卡住的原生API中的一個描述here(也就是不通過C++/CLI訪問System.Net.Mail。) 。
我同意c#會更容易,但是我需要整合發送電子郵件與現有的C++命令行程序。 – Rossini 2010-10-11 12:01:09
- 1. Ubuntu命令行電子郵件發送
- 2. Bash命令發送電子郵件
- 3. Symfony2和命令電子郵件發送 - 發送app_dev電子郵件
- 4. 發送電子郵件C#
- 5. 從VBA電子郵件程序發送HTML電子郵件
- 6. Java電子郵件發送API電子郵件沒有發送..掛斷程序
- 7. Outlook Express - 從命令行發送電子郵件
- 8. 直接發送新的電子郵件窗口 - 從命令行
- 9. 撰寫並通過命令行雷鳥發送電子郵件
- 10. 如何使用linux命令行發送HTML電子郵件
- 11. 使用憑據從powershell命令行發送電子郵件
- 12. 你是否通過linux命令行發送電子郵件?
- 13. 從linux命令行發送電子郵件的不同方式
- 14. 通過命令行發送電子郵件 - 不包括身體
- 15. 如何從命令行發送電子郵件?
- 16. 如何在Windows上從命令行發送電子郵件
- 17. Vb.net程序發送電子郵件?
- 18. Asp.net電子郵件發送程序
- 19. C#應用程序發送電子郵件。錯誤[發送郵件失敗。]
- 20. 發送來自Linux中的C/C++程序的電子郵件
- 21. 如何發送電子郵件與電子郵件模板c#
- 22. 發送電子郵件操作不發送電子郵件
- 23. PHP發送電子郵件多次發送電子郵件
- 24. 使用郵件命令發送電子郵件時指定發件人
- 25. 發送電子郵件附件C#
- 26. 通過Visual C++/Cli不發送郵件發送電子郵件
- 27. Magento命令電子郵件
- 28. Freshdesk電子郵件命令
- 29. SugarCRM的電子郵件行銷不發送電子郵件
- 30. 通過谷歌應用程序發送電子郵件在C#
你想發送什麼樣的電子郵件? IMAP?本地Exchange? POP3? – 2010-10-06 13:06:54
我試圖在郵件正文中發送簡單的文本消息,我不想發送附件或類似的東西。我在一個交換電子郵件服務器的局域網上,所以我會用它來發送電子郵件。 – Rossini 2010-10-07 12:16:52
@Steve Townsend:沒有「種類」的電子郵件。電子郵件幾乎總是通過SMTP發送。您列出的協議是*接收*電子郵件的方式。 – casablanca 2010-10-09 18:36:14