本文翻译自 flutter_mailer | Flutter Package (pub.dev)
感觉作者[示例 APP]的链接和[邮件选项]的链接整反了。
pub的示例要在 iOS 上正常运行的话,需要设置下面的内容:
Info.plist
<key>NSPhotoLibraryUsageDescription</key>
<string>需要您的授权才能访问图片库</string>
<key>NSCameraUsageDescription</key>
<string>需要您的授权才能访问相机</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要您的授权才能访问麦克风</string>
这是 image_picker | Flutter Package (pub.dev) (中文) 需要的权限。
通过设备的邮件客户端来共享邮件内容 - 支持多附件。
在移动端开发中,跨应用共享邮件域数据的简单快捷的插件。
支持
- Android
- iOS
开始
添加 pubspec 依赖,如下:
dependencies:
flutter:
sdk: flutter
flutter_mailer: ^2.0.0
具体的邮件选项如下:
发送邮件
import 'package:flutter_mailer/flutter_mailer.dart';
...
...
final MailOptions mailOptions = MailOptions(
body: 'a long body for the email <br> with a subset of HTML',
subject: 'the Email Subject',
recipients: ['example@example.com'],
isHTML: true,
bccRecipients: ['other@example.com'],
ccRecipients: ['third@example.com'],
attachments: [ 'path/to/image.png', ],
);
final MailerResponse response = await FlutterMailer.send(mailOptions);
switch (response) {
case MailerResponse.saved: /// ios only
platformResponse = 'mail was saved to draft';
break;
case MailerResponse.sent: /// ios only
platformResponse = 'mail was sent';
break;
case MailerResponse.cancelled: /// ios only
platformResponse = 'mail was cancelled';
break;
case MailerResponse.android:
platformResponse = 'intent was successful';
break;
default:
platformResponse = 'unknown';
break;
}
注 gmail 和其它 APP 可能 会在外部解析 HTML。
[Android]检查邮件客户端是否已安装
如果想要向指定的邮件 APP 发送 intent , 需要设置邮件选项(appSchema)。( isAppInstalled()
) 在 [iOS] 上返回 false。
const GMAIL_SCHEMA = 'com.google.android.gm';
final bool gmailinstalled = await isAppInstalled(GMAIL_SCHEMA);
if(gmailinstalled) {
final MailOptions mailOptions = MailOptions(
body: 'a long body for the email <br> with a subset of HTML',
subject: 'the Email Subject',
recipients: ['example@example.com'],
isHTML: true,
bccRecipients: ['other@example.com'],
ccRecipients: ['third@example.com'],
attachments: [ 'path/to/image.png', ],
appSchema: GMAIL_SCHEMA,
);
await FlutterMailer.send(mailOptions);
}
[iOS] 检查设备是否有能力发送邮件
该包在 [iOS] 上使用 MFMailComposeViewController ,它需要默认的邮件 APP 。如果没有安装,可能需要转为使用 url_launcher 。
( canSendMail()
) 在 [Android] 上返回 false 。
final bool canSend = await canSendMail();
if(!canSend && Platform.isIos) {
final url = 'mailto:$recipient?body=$body&subject=$subject';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
}
该包基于 react-native-mail