Разблокировать файл после отправки в виде вложения с CDO - PullRequest
0 голосов
/ 28 июня 2011

Привет У меня есть следующая проблема:

Я отправляю электронное письмо с приложением CDO (мне нужно сделать это, потому что system.Net.Mail не работает с неявным SSL на порту 465).Проблема в том, что вложенный файл после отправки остается заблокированным.Как я могу разблокировать его?

Я программирую, используя c #.

Спасибо за ваш ответ

Piercarlo

Ответы [ 3 ]

0 голосов
/ 19 января 2012

По какой-то причине форсирование сбора мусора у меня не сработало. Я решил эту проблему, вручную добавив вложение к объекту CDO.Message в виде байтового массива, как объяснено здесь .

0 голосов
/ 17 января 2018

У меня просто была такая же проблема, но я не хочу полагаться на сборку мусора.Вот рабочее решение C ++.После этого добавьте свое сообщение:

CDO::IBodyParts *bodyparts;
imsg->get_Attachments(&bodyparts);
bodyparts->DeleteAll();
imsg->Release();

После этого удаление файла будет работать нормально.

0 голосов
/ 29 июня 2011

Я решил от себя

После CDO.Message.Send () нужно это;

GC.Collect();
GC.WaitForPendingFinalizers();

Надеюсь, что это будет полезно для некоторых других после кода завершения

[SqlFunction()]
public static SqlString SendFromMittente(SqlString Messaggio, SqlString eMailDestinatario, SqlString From, SqlString SmtpHost, SqlString Utente, SqlString Password, SqlString Oggetto, SqlString Allegati, SqlBoolean SSL, SqlInt32 SmtpPort)
{
    try
    {
        CDO.Message oMsg = new CDO.Message();
        CDO.IConfiguration iConfg;
        iConfg = oMsg.Configuration;
        ADODB.Fields oFields;
        oFields = iConfg.Fields;
        ADODB.Field oField;
        oField = oFields["http://schemas.microsoft.com/cdo/configuration/sendusing"];
        oField.Value = CDO.CdoSendUsing.cdoSendUsingPort;
        oField = oFields["http://schemas.microsoft.com/cdo/configuration/smtpserver"];
        oField.Value = SmtpHost.Value;
        oField = oFields["http://schemas.microsoft.com/cdo/configuration/smtpusessl"];
        oField.Value = SSL.Value.ToString();
        oField = oFields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"];
        oField.Value = SmtpPort.Value.ToString();
        oField = oFields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"];//Use 0 for anonymous 1 for authenticate
        oField.Value = CDO.CdoProtocolsAuthentication.cdoBasic;
        oField = oFields["http://schemas.microsoft.com/cdo/configuration/sendusername"];
        oField.Value = Utente.Value;
        oField = oFields["http://schemas.microsoft.com/cdo/configuration/sendpassword"];
        oField.Value = Password.Value;
        oFields.Update();
        oMsg.Subject = Oggetto.Value;
        oMsg.From = From.Value;
        oMsg.To = eMailDestinatario.Value;
        oMsg.TextBody = Messaggio.Value;
        if (!string.IsNullOrEmpty(Allegati.Value))
        {
            char[] sep = { ',' };
            string[] aryAllegati = Allegati.Value.Split(sep);
            foreach (string file in aryAllegati)
            {
                oMsg.AddAttachment(file);

            }
        }
        oMsg.Send();
        GC.Collect();
        GC.WaitForPendingFinalizers();
        Marshal.FinalReleaseComObject(oMsg);
        return new SqlString("true");
    }
    catch (Exception ex)
    {
        return new SqlString(ex.ToString());
    }
}

Обратите внимание, что код написан для сборки SQL

Piercarlo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...