te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>dependency injection - Error injecting @nestjs-modulesmailer MailerService when publishing a package - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

dependency injection - Error injecting @nestjs-modulesmailer MailerService when publishing a package - Stack Overflow

programmeradmin3浏览0评论

I was using @nestjs-modules/mailer in my NestJS API to send emails. As a part of abstraction, common functions and services that are being used by multiple APIs are abstracted out and published as libraries in GitHub.

While doing the same with @nestjs-modules/mailer I am getting this error.

Error setting up transport: Cannot read properties of undefined (reading 'addTransporter')

Here is my module:

@Module({})
export class EmailModule {
  static forRoot(options: EmailModuleOptions): DynamicModule {
    const emailOptionsProvider: Provider = {
      provide: 'EMAIL_MODULE_OPTIONS',
      useValue: options,
    };

    return {
      module: EmailModule,
      imports: [
        MailerModule.forRoot({
          transport: 'smtps://[email protected]:[email protected]',
          template: {
            dir: path.join(__dirname, 'templates'),
            adapter: new HandlebarsAdapter(),
            options: {
              strict: true,
            },
          },
        }),
      ],
      providers: [emailOptionsProvider, EmailService],
      exports: [EmailService],
      global: true,
    };
  }
}

Here is my service:

@Injectable()
export class EmailService {
  email;
  emailPassword;
  constructor(
    @Inject('EMAIL_MODULE_OPTIONS') private options: EmailModuleOptions,
    private readonly mailerService: MailerService,
  ) {
    this.email = options.adminEmail;
    this.emailPassword = options.adminEmailPassword;
  }

  async sendEmail(action, to, subject, context) {
    context.year = new Date().getFullYear();
    const from = this.email;

    try {
      await this.setAdminTransport();
      await this.mailerService.sendMail({
        transporterName: 'zoho',
        to,
        from,
        subject,
        template: action,
        context,
      });
    } catch (error) {
      console.error('Error sending mail:', error.message);
    }
  }

  private async setAdminTransport(): Promise<void> {
    try {
      const config: Options = {
        host: 'smtp.zoho.au',
        port: 465,
        secure: true,
        auth: {
          user: this.email,
          pass: this.emailPassword,
        },
      };
      this.mailerService.addTransporter('zoho', config); // here is the error.
    } catch (error) {
      console.error('Error setting up transport:', error.message);
      throw error;
    }
  }
}

I am not providing the transport in the Module as I have multiple transports and I need them to be set accordingly (I have removed that code from above).

The above code is published as a package in GitHub and is being used in my API.

In my API, I am importing this module in app.module to provide the email address and password and then injecting the new EmailService to call sendEmail

The MailerService is not being injected. How can I inject that?

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论