You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Firestore数据库数据通过Mailer嵌入邮件发送?

问题

已实现Flutter应用读取Firestore数据展示,且点击「¡Alertar!」按钮可通过Mailer发送邮件,但无法将对应卡片的症状数据嵌入邮件内容,当前仅发送固定HTML内容。

解决步骤
  • 修改sendEmail方法,添加参数接收当前卡片的Firestore文档数据
  • 在按钮点击时传入对应文档数据
  • 基于传入的数据动态生成邮件HTML内容
修改后的代码

数据展示部分(关键修改)

// ... 其他代码保持不变
TextButton(
  child: Text("¡Alertar!"),
  // 传入当前卡片对应的文档数据
  onPressed: () => sendEmail(data.docs[index].data() as Map<String, dynamic>),
),
// ... 其他代码保持不变

邮件发送方法(完整修改)

// 修改方法,添加参数接收文档数据
Future sendEmail(Map<String, dynamic> symptomData) async {
  final user = await GoogleAuthApi.signIn();

  if (user == null) return;

  final email = user.email;
  final auth = await user.authentication;
  final token = auth.accessToken!;

  print('Authenticated: $email');
  GoogleAuthApi.signOut();

  final smtpServer = gmailSaslXoauth2(email, token);
  
  // 根据症状数据生成动态HTML内容
  final htmlContent = '''
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Alerta de Síntomas</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h2>¡Alerta de Síntomas!</h2>
<p><strong>Fecha ingreso sintoma:</strong> ${symptomData['Fecha ingreso sintoma']}</p>
<ul>
<li>Fatiga: ${symptomData['Fatiga'] ? "Si" : "No"}</li>
<li>Miccion: ${symptomData['Miccion'] ? "Si" : "No"}</li>
<li>Flujo Vaginal: ${symptomData['Flujo Vaginal'] ? "Si" : "No"}</li>
<li>Estreñimiento: ${symptomData['Estreñimiento'] ? "Si" : "No"}</li>
<li>Acidez Gastrica: ${symptomData['Acidez Gastrica'] ? "Si" : "No"}</li>
<li>Sangrado Nasal: ${symptomData['Sangrado Nasal'] ? "Si" : "No"}</li>
<li>Sangrado de encias: ${symptomData['Sangrado de encias'] ? "Si" : "No"}</li>
<li>Hinchazon: ${symptomData['Hinchazon'] ? "Si" : "No"}</li>
<li>Problemas respiratarios: ${symptomData['Problemas respiratarios'] ? "Si" : "No"}</li>
</ul>
</body>
</html>
''';

  final message = Message()
    ..from = Address(email, 'Aplicacion contro embarazos alto riesgo!')
    ..recipients = ['gx_13@hotmail.com']
    ..subject = '¡¡Alertar!! '
    ..html = htmlContent;

  try {
    await send(message, smtpServer);
    showSnackBar('Alerta Enviada');
  } on MailerException catch (e) {
    print(e);
  }
}

void showSnackBar(String text) {
  final snackBar = SnackBar(
    content: Text(
      text,
      style: TextStyle(fontSize: 20),
    ),
    backgroundColor: Colors.green,
  );
  ScaffoldMessenger.of(context)
    ..removeCurrentSnackBar()
    ..showSnackBar(snackBar);
}
说明
  • 通过给sendEmail添加参数,将当前卡片的症状数据传递到邮件发送逻辑中
  • 动态生成HTML内容时,直接使用传入的symptomData中的字段值,确保邮件内容与点击的卡片数据对应
  • 修复了原SnackBar文本的拼写错误(sAlerta改为Alerta)

内容的提问来源于stack exchange,提问作者jmichelena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:10:35