O WebJob não está carregando o assembly SendGridMail

Estou tentando usar as extensões SendGrid para os WebJobs do Azure. Tentei seguir o exemplo, mas, infelizmente, o aplicativo WebJob falha com o seguinte erro:

Não foi possível carregar o arquivo ou assembly 'SendGridMail, Versão = 6.1.0.0, Culture = neutral, PublicKeyToken = 2ae73662c35d80e4' ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado.

Tendo encontrado algo semelhante antes, envolvendo o Json da NewtonSoft, tentei corrigir o problema adicionando o seguinte ao app.config:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="SendGridMail" publicKeyToken="2ae73662c35d80e4" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

Infelizmente, isso não ajudou (mesma mensagem de erro).

Percebi que o pacote de nuget de extensão WebJobs SendGrid instala uma versão antiga do SendGrid (v6.1). Mas estou tentando seguir os exemplos de extensões WebJob e eles têm a seguinte instrução using:

using SendGrid.Helpers.Mail;

e, infelizmente, o namespace SendGrid.Helpers.Mail não existe na v6.1 do SendGrid.

detalhes adicionais

Com base nos comentários de Tom, desinstalei o pacote de nuget das extensões do SendGrid e instalei as bibliotecas necessárias "manualmente" editando project.json. Isso me dá a versão estável mais recente de cada uma das bibliotecas ... mas o aplicativo ainda trava na inicialização com o mesmo erro.

Aqui está o código de inicialização:

public static void Main(string[] args)
{
    var config = new JobHostConfiguration()
    {
        NameResolver = new QueueNameResolver( new AzureContext() ),
    };

    if( config.IsDevelopment )
    {
            config.UseDevelopmentSettings();
    }

    config.Tracing.ConsoleLevel = TraceLevel.Info;

    // this is the line where the exception gets thrown
    config.UseSendGrid();

    JobHost host = new JobHost( config );

    host.RunAndBlock();
}

Estou seguindo o exemplo SendGrid, modificando uma assinatura de método em Functions.cs da seguinte maneira:

public static void ProcessPhoneFileMessage(
        [QueueTrigger( "%" + nameof( ContainerQueueConstants.PhoneFiles ) + "%" )] AgencyOutreachMessage msg,
        [SendGrid] out Mail message
        )
{
    StringWriter swLogger = new StringWriter();

    try
    {
        GeneratePhoneFileJob fmJob = new GeneratePhoneFileJob( swLogger, msg );

        fmJob.Execute();
    }
    catch( Exception e )
    {
        swLogger.WriteLine( $"{nameof( GeneratePhoneFileJob )} triggered an exception, message was: {e.Message}" );
    }

    message = new Mail();

    message.Subject = "Phone File Job";
    message.AddContent( new Content( "text/plain", "Completed the Phone File Job" ) );
    message.AddContent( new Content( "text/plain", swLogger.ToString() ) );

    Personalization personalization = new Personalization();
    personalization.AddTo(new Email("[email protected]", "Mark Olbert") );
    message.AddPersonalization( personalization );
}

Se eu não fizer a chamada para UseSendGrid () no código de inicialização do aplicativo, recebo uma exceção quando a definição do método é analisada, solicitando que eu chame UseSendGrid (). Mas, como observei acima, UseSendGrid () explode.

Sem exceção, mas também sem e-mail

Com base no exemplo de Tom, modifiquei a função de processamento de mensagens para que não usasse um parâmetro out Mail e simplesmente criei e enviei o email de dentro do corpo do método:

SendGridAPIClient sg = new SendGridAPIClient( "redacted" );
Mail message = new Mail();

message.Subject = "Phone File Job";
message.AddContent( new Content( "text/plain", "Completed the Phone File Job" ) );
message.AddContent( new Content( "text/plain", swLogger.ToString() ) );

Personalization personalization = new Personalization();
personalization.AddTo(new Email("redacted", "Mark Olbert") );
message.AddPersonalization( personalization );

sg.client.mail.send.post( requestBody: message.Get() );

O aplicativo do console agora inicia bem e o processador de mensagens funciona bem ... mas nenhum email é enviado. Ou melhor, nenhum chega e, quando verifico meu painel no SendGrid.com, não há registro de nenhuma atividade.

Sucesso!

Finalmente consegui que isso funcionasse. Acredito que o problema "final" foi o fato de eu ter esquecido de incluir um endereço De no email que estava criando. Depois que fiz isso, funcionou como um encanto.

questionAnswers(1)

yourAnswerToTheQuestion