web-dev-qa-db-ja.com

Flutter Webで直接メールを送信する方法

私はFlutter Webを構築しています私は私のGmailのEメールアドレスにメールデータを送信しなければならないのですか。私を助けてください。私はユーザー "Mailer 3.0.4"とflutter_email_senderを持っていました:^ 2.2.2しかし、両方とも機能していません...ここは私のコードです:

  // Perform login or signup
  Future<void> _validateAndSubmitForInformationForm() async {
    print('1');
    final MailOptions mailOptions = MailOptions(
      body: 'a long body for the email <br> with a subset of HTML',
      subject: 'the Email Subject',
      recipients: ['[email protected]'],
      isHTML: true,
      bccRecipients: ['[email protected]'],
      ccRecipients: ['[email protected]'],
//      attachments: [
//        'path/to/image.png',
//      ],
    );
    print('3');

    await FlutterMailer.send(mailOptions);
    print('2');
  }
 _
4
Arslan Ehsan

編集:SendGrid(およびMailjet)がクライアント上ではなくサーバー上でのみ機能するように設計されているため、これは機能しません。

@ Dazza500が言ったように、あなたは次のことが必要です。

1)登録AT https://app.sendgrid.com/
[。] 2)APIキーを作成する
[。] 3)オプション:チェックマニュアル( https://sendgrid.com/docs/api_reference/web_api_v3/index.html
[。] 4)そしてこのコードを使用する(SendGridapikeyをあなたのAPIキーに置き換える)。

import 'package:http/http.Dart' as http;

class SendGridUtil {
  static sendRegistrationNotification(String email) async {
    Map<String, String> headers = new Map();
    headers["Authorization"] =
        "Bearer SENDGRIDAPIKEY";
    headers["Content-Type"] = "application/json";

    var url = 'https://api.sendgrid.com/v3/mail/send';
    var response = await http.post(url,
        headers: headers,
        body:
            "{\n          \"personalizations\": [\n            {\n              \"to\": [\n                {\n                  \"email\": \"[email protected]\"\n                },\n                {\n                  \"email\": \"[email protected]\"\n                }\n              ]\n            }\n          ],\n          \"from\": {\n            \"email\": \"[email protected]\"\n          },\n          \"subject\": \"New user registration\",\n          \"content\": [\n            {\n              \"type\": \"text\/plain\",\n              \"value\": \"New user register: $email\"\n            }\n          ]\n        }");
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
  }
}
 _
1

あなたのフレーバー言語で特定の(例えば、トークンに保護されている)WebAPIを作成してから、単純なPOST)を作成することができます。

フラッターで:

Future sendEmail(elementType elementoSent) async {
    var body = "Blabla, " + elementoSent.prpoerties;

    try {
        await http.post(
            "https://yourapiUrl.net/api/method",
            headers: {
                'Content-type': 'application/json',
                'Accept': 'application/json'
            },
            body: jsonEncode({"emailbody": '$body'}));
    } catch (e) {
        print(e);
    }
}
 _

これは、例えばWeb APIコードブロックです。 (C#で):

// POST api/<EmailsController>
[HttpPost]
public void Post([FromBody] EmailsModel model)
{
    if (model.Typemail == "1")
        _emailSender.SendEmailtoUserAsync("[email protected]", "mail object", model.EmailBody);
}
 _

NS _emailSender.SendEmailtoUserAsync MailjetやSendGridなどの特定または外部メールサービスを使用します。

0
Georges Damien

flutter_Email_Senderプラグインを使用して、それがすべてのios AndroidおよびWebプラットフォーム)で機能する電子メールを送信することができます。

final Email email = Email(
body: 'Email body',
subject: 'Email subject',
recipients: ['[email protected]'],
cc: ['[email protected]'],
bcc: ['[email protected]'],
attachmentPath: '/path/to/attachment.Zip',
isHTML: false,
);

await FlutterEmailSender.send(email);
 _

このリンクを参照するこのプラグイン https://pub.dev/packages/flutter_email_sender

0
rishabh mistry

SendGridのようなものを使用して、このようなものでFlutter MobileからEメールを送信できます。フォーマットの悪いフォーマットで申し訳ありません。

import 'package:http/http.Dart' as http;

class SendGridUtil {
  static sendRegistrationNotification(String email) async {
    Map<String, String> headers = new Map();
    headers["Authorization"] =
        "Bearer $$$SENDGRIDAPIKEY$$$";
    headers["Content-Type"] = "application/json";

    var url = 'https://api.sendgrid.com/v3/mail/send';
    var response = await http.post(url,
        headers: headers,
        body:
            "{\n          \"personalizations\": [\n            {\n              \"to\": [\n                {\n                  \"email\": \"[email protected]\"\n                },\n                {\n                  \"email\": \"[email protected]\"\n                }\n              ]\n            }\n          ],\n          \"from\": {\n            \"email\": \"[email protected]\"\n          },\n          \"subject\": \"New user registration\",\n          \"content\": [\n            {\n              \"type\": \"text\/plain\",\n              \"value\": \"New user register: $email\"\n            }\n          ]\n        }");
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
  }
}
 _

Flutter Webから電子メールを送信するには、FireBase Cloud関数のようなものを使用できます。これは、FireBase Authで新しいユーザーが作成されたときに実行される機能です。

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
const sgMail = require('@sendgrid/mail')

admin.initializeApp(functions.config().firebase);

exports.sendWelcomeEmail = functions.auth.user().onCreate(user => {

console.log("User with email created: " + user.email);

sgMail.setApiKey("$$$SENDGRIDKEY$$$");
const liftAiMsg = {
  to: '[email protected]',
  from: '[email protected]',
  subject: 'New user created',
  text: 'New user created with email: ' +user.email,
  html: "<strong>New user created with email:  "+user.email+"</strong>",
};

sgMail.send(liftAiMsg);

const customerMsg = {
  to: user.email,
  from: '[email protected]',
  subject: 'Welcome to LiftAI',
  text: 'Welcome to LiftAI',
  html: '<strong>Welcome to LiftAI!</strong>',
};

sgMail.send(customerMsg);


});
 _
0
dazza5000