gmail-api .net Как на сайт MVC отправлять почту без входа в систему - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь использовать google gmail-api на веб-сайте .NET MVC5 на Azure.Я купил учетную запись gmail suite и хотел бы, чтобы мои веб-сайты отправляли электронную почту через gmail.

Я следовал более или менее учебному пособию, и приведенный ниже код является результатом моего исследования.Это работает, но ... окна аутентификации Google открываются каждый раз.Похоже, что ClientId и ClientSecret недостаточно.

var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                new ClientSecrets
                {
                    ClientId = "xxxxxxxx.apps.googleusercontent.com",
                    ClientSecret = "xxxxxx"
                },
                new[] { GmailService.Scope.GmailModify },
                _defaultSender,
                CancellationToken.None);

            var service = new GmailService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "MyProjet"
            });

            var msg = new AE.Net.Mail.MailMessage
            {
                Subject = subject,
                Body = html,
                ContentType = "text/html",
                From = new MailAddress(_defaultSender)
            };

            foreach (var recipient in recipients)
            {
                msg.To.Add(new MailAddress(recipient));
            }
            var msgStr = new StringWriter();
            msg.Save(msgStr);

            await service.Users.Messages.Send(new Message()
            {
                Raw = Base64UrlEncode(msgStr.ToString())
            }, "me").ExecuteAsync();

Учебное пособие по Google wrote:

В примере будет предпринята попытка открыть новое окно иливкладка в браузере по умолчанию.Если это не удается, скопируйте URL-адрес из консоли и вручную откройте его в браузере.

Другого пути нет?Учетная запись службы сайта не может отправлять контактные / входящие в систему / и т.д. электронные письма через gmail?Другие стеки показывают, что это может выглядеть так: Отправка электронной почты в .NET через Gmail или Как отправить письмо в .Net в соответствии с новыми политиками безопасности?

1 Ответ

0 голосов
/ 02 марта 2019

Брендан Грин направь меня в правильном направлении.Я путаю учетную запись олицетворения gmail (к которой ведет руководство) и использование учетной записи службы для отправки в качестве предопределенного электронного письма.

Вот пример кода, который работает с MVC5 WebApp в Azure.Прощай, сендгрид!Привет GMAIL!

var serviceAccountEmail = "myserviceaccount@domain-xxxxxx.iam.gserviceaccount.com";
            var certificate = new X509Certificate2(Resources.Gmail.Certificat,//the google .p12 file stored as resource
                "notasecret",
                X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

            var credential = new ServiceAccountCredential(
                new ServiceAccountCredential.Initializer(serviceAccountEmail)
                {
                    User = "emailYouWanToUse@domain.com",
                    Scopes = new[] { "https://mail.google.com/" }
                }.FromCertificate(certificate)
            );

            // Create the service.
            var service = new GmailService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "ProjectName"
            });

            var msg = new AE.Net.Mail.MailMessage
            {
                Subject = subject,
                Body = html,
                ContentType = "text/html",
                From = new MailAddress(_defaultSender)
            };

            foreach (var recipient in recipients)
            {
                msg.To.Add(new MailAddress(recipient));
            }
            var msgStr = new StringWriter();
            msg.Save(msgStr);

            await service.Users.Messages.Send(new Message()
            {
                Raw = Base64UrlEncode(msgStr.ToString())
            }, "me").ExecuteAsync();
...