는 Sending Email using MAPI - A COM DLL
내가 한 번 MAPI를 [편집]
사용했습니다 참조 나는 코드를 게시 할 수 있습니다. 나는 그것이 당신이 찾고있는 것인지 확실하지 않습니다. 이 옵션은 첨부 파일이있는 메일을 보냅니다 (본문은 포함되지 않음).
헤더 :
#pragma once
class MailSender
{
public:
MailSender();
~MailSender();
void AddFile(LPCTSTR path, LPCTSTR name = NULL);
bool Send(HWND hWndParent, LPCTSTR szSubject = NULL);
private:
struct attachment { tstring path, name; };
vector<attachment> m_Files;
HMODULE m_hLib;
};
CPP : I 등 다양한 인터넷 소스의 도움으로, 내 자신에 의해이 문제를 해결 한
#include "stdafx.h"
#include "MySendMail.h"
#include <mapi.h>
MailSender::MailSender()
{
m_hLib = LoadLibrary(_T("MAPI32.DLL"));
}
MailSender::~MailSender()
{
FreeLibrary(m_hLib);
}
void MailSender::AddFile(LPCTSTR file, LPCTSTR name)
{
attachment a;
a.path = file;
if (!name)
a.name = PathFindFileName(file);
else
a.name = name;
m_Files.push_back(a);
}
bool MailSender::Send(HWND hWndParent, LPCTSTR szSubject)
{
if (!m_hLib)
return false;
LPMAPISENDMAIL SendMail;
SendMail = (LPMAPISENDMAIL) GetProcAddress(m_hLib, _T("MAPISendMail"));
if (!SendMail)
return false;
vector<MapiFileDesc> filedesc;
for (std::vector<attachment>::const_iterator ii = m_Files.begin(); ii!=m_Files.end(); ii++)
{
MapiFileDesc fileDesc;
ZeroMemory(&fileDesc, sizeof(fileDesc));
fileDesc.nPosition = (ULONG)-1;
fileDesc.lpszPathName = (LPTSTR) ii->path.c_str();
fileDesc.lpszFileName = (LPTSTR) ii->name.c_str();
filedesc.push_back(fileDesc);
}
tstring subject;
if (szSubject)
subject = szSubject;
else
{
for (std::vector<attachment>::const_iterator ii = m_Files.begin(); ii!=m_Files.end(); ii++)
{
subject += ii->name.c_str();
if (ii+1 != m_Files.end())
subject += ", ";
}
}
MapiMessage message;
ZeroMemory(&message, sizeof(message));
message.lpszSubject = (LPTSTR) subject.c_str();
message.nFileCount = filedesc.size();
message.lpFiles = &filedesc[0];
int nError = SendMail(0, (ULONG)hWndParent, &message, MAPI_LOGON_UI|MAPI_DIALOG, 0);
if (nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT && nError != MAPI_E_LOGIN_FAILURE)
return false;
return true;
}
전체 MAPI는 Outlook 또는 다른 MAPI 클라이언트가 설치된 경우 Windows 컴퓨터에만 제공됩니다. Windows는 간단한 MAPI 만 제공됩니다. Outlook이 설치되어 있다는 것을 알고 있다면 Outlook의 API를 사용하여 이메일을 보내지 않는 이유는 무엇입니까? –
아이디어는 그들이 가지고있는 MAPI 클라이언트를 사용하는 것입니다. 사람들이 특정 전자 메일 클라이언트를 사용하도록 강요하지는 않을 것입니다. 그러나 호기심에서 Outlook API는 정확히 무엇입니까? VBA인가요? – Lundin
사람이 특정 전자 메일 클라이언트를 사용하도록 강요하고 싶지 않으면 단순한 mapi로 인해 어려움을 겪을 수 있습니다. 웹 메일을 사용하면 작동하지 않지만 대부분의 이메일 클라이언트는 간단한 MAPI를 지원합니다. Outlook의 api에 대한 정보는 http://msdn.microsoft.com/en-us/library/gg608200.aspx에서 확인하십시오. –