0

每当我的模拟触发某些事件时,我想向我的 gmail 帐户发送一封电子邮件。每次发生事件时,都会调用 Activate 函数(代码如下)。ACtivate 函数实习生在线程中调用函数“SendEmailThreadFunc”。

仅供参考:我正在使用 C++ 在 Linux 和 ARM 处理器上运行此代码

当激活函数调用一次时,我就可以发送和接收邮件了。但是,当我尝试在一秒钟内发送 15 封邮件(通过调用激活函数 15 次)时,电子邮件不会发送。这是由于 popen,因为 popen 为要发送的每封电子邮件打开一个进程。我认为我的处理器可以处理多个 popens。

您能否帮助我在发送多封电子邮件时有什么方法可以处理某些条件同时触发的动作。

 bool SendEmailAction::Activate(SystemStateCollection& currentSystemState)
{
    std::thread sendThread(&SendEmailAction::SendEmailThreadFunc,this);
    sendThread.detach();

    return true;
}


void* SendEmailAction::SendEmailThreadFunc(void *arg)
{
    // Assume: Here emailReceipt and other variables are passed with right values
    pSendEmailAction->SendData(emailRecipient,pSendEmailAction->GetEmailSubjectString(),pSendEmailAction-> GetMsgString()
    
}

int SendEmailAction::SendData(  string emailRecipient, string emailSubject, string msgString)
{
    int retval = -1;
    const char *message;
    string command("/usr/bin/msmtp -t");

    FILE *mailpipe = popen(command.c_str(), "w");
    if (mailpipe != NULL) {
        fprintf(mailpipe, "To: %s\n", emailRecipient.c_str());
        fprintf(mailpipe, "From: %s\n", (EmailServerSettings::GetInstance()->GetSmtpUserName()).c_str());
        fprintf(mailpipe, "Subject: %s\n\n", (emailSubject).c_str());
        fwrite(message, 1, strlen(message), mailpipe);
        fwrite(".\n", 1, 2, mailpipe);
        retval = pclose(mailpipe); // returns 0 on successful mail sent. Greater than 0 will be returned on fail to send.
     }
     else 
     {
        pclose(mailpipe);
        
     }

}

我从这里拿了这段代码

4

0 回答 0