HarmonyOS 如何调用手机发送邮件服务?

HarmonyOS
2024-12-25 11:35:11
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

可以通过UIAbilityContext.startAbility拉起电子邮件。在want里面传入相关参数即可。参考代码如下:

import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct EmailTest {
  @State message: string = '拉起邮件';
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
            startEmailAppInfoAbilityExplicit(context);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

function startEmailAppInfoAbilityExplicit(context: common.UIAbilityContext): void {
  let want: Want = {
    bundleName: 'com.huawei.hmos.email',
    abilityName: 'EntryAbility'
  };
  context.startAbility(want)
    .then(() => {
      console.info('拉起成功')
    })
    .catch((err: BusinessError) => {
      console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`);
    });
}

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-application-uiabilitycontext-V5#uiabilitycontextstartability

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-app-ability-want-V5

如果要携带参数,可以通过拼接uri传递收件人,抄送人,内容等参数,关键代码参考如下:

mail({ subject= '', recipients=[], body='', ccRecipients=[], bccRecipients=[] }: mainOptions, callback: Function) {
  let mailUri: string = '';
  mailUri += recipients?.join(',') || '';
  mailUri += '?cc=' + ccRecipients?.join(',') || '';
  mailUri += '&bcc=' + bccRecipients?.join(',') || '';
  mailUri += '&subject=' + subject;
  mailUri += '&body=' + body;
  Logger.info(TAG + 'mailUri ', mailUri, 'ccRecipients:' + ccRecipients, 'bccRecipients:' + bccRecipients);
  this.startEmailApp(mailUri, callback);
}


startEmailApp = (mailUri, callback) => {
  let want: Want = {
    bundleName: 'com.huawei.hmos.email',
    abilityName: 'EntryAbility',
    moduleName: 'entry',
    uri: 'mailto:' + mailUri,
    action: 'ohos.want.action.viewData',
  };
  Logger.info(TAG + 'want ', JSON.stringify(want));

  try {
    this.ctx.uiAbilityContext.startAbility(want)
      .then(() => {
        Logger.info(TAG, 'startAbility success');
      })
      .catch((err: BusinessError) => {
        Logger.info(TAG, 'startAbility error.', err.message);
        callback(err.message);
      })
  } catch (e) {
    callback(e);
    Logger.info(TAG + 'error:', e);
  }
}
分享
微博
QQ
微信
回复
2024-12-25 13:37:06
相关问题
HarmonyOS 如何调用短信应用发送短信
358浏览 • 1回复 待解决
udp服务信号是如何发送和接收
2084浏览 • 1回复 待解决
HarmonyOS用手动退到后台
274浏览 • 1回复 待解决
HarmonyOS 跳转邮件App,怎么实现?
275浏览 • 1回复 待解决