如何将 Angular 组件渲染到 Node.Js 中的 HTML(发送电子邮件)

How to Render an Angular Component to HTML in Node.Js (To Send EMails)

假设我有一个简单的 Angular 组件:

@Component({
  selector: 'app-email-content',
  template: '<h1>Welcome {{username}}!</h1>'
})
export class WelcomeEmailComponent {
  @Input() username: string
}

我的目标是使用此 Angular 组件并将其呈现为带有 Node.Js 的普通 HTML,以发送自定义电子邮件。

我知道 Angular Universal 绝对可以实现服务器端渲染。但是我不确定如何显式渲染一个特定的组件。

方法是从 Angular SSR 项目发送 Angular component-based 动态生成的模板到用户的电子邮件。

在此答案底部找到示例存储库。

您需要遵循的步骤;

  1. 在专用于仅显示电子邮件模板而非导航栏、全局 CSS 等的单独路由路径中设计您的模板

示例:

welcome-email-component.component.ts

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-welcome-email-component',
  templateUrl: './welcome-email-component.component.html',
  styleUrls: ['./welcome-email-component.component.css']
})
export class WelcomeEmailComponentComponent implements OnInit {

  username: any;

  constructor(private route: ActivatedRoute) { }

  ngOnInit(): void {
    this.route.params.subscribe(params => {
      this.username = params.username;
    });
  }

}

welcome-email-component.component.html

<style>
    .title-p {
        color: #00025a;
        font-size: 20px;
        font-weight: bold;
    }
</style>

<p class="title-p">Welcome {{username}}</p>

You need to specify a route for this component as below, so when the user navigates to the welcome-email/username route it should show only the email template generated component.

{ path: 'welcome-email/:username', component: WelcomeEmailComponentComponent }
  1. 根据伟大的 Angular SSR 指南 Server-side rendering (SSR) with Angular Universal.
  2. 对您的项目实施 Angular SSR

两行代码而已

ng add @nguniversal/express-engine
npm run dev:ssr
  1. 最后创建一个server-side API 以从您的Angular 组件生成模板并发送电子邮件或提供单个组件的HTML 代码,添加API 在你的 server.ts 中的功能如下。

server.ts

server.get('/api/send-email/:username', (req, res) => {
    // Below is the URL route for the Angular welcome mail component
    request(`http://127.0.0.1:4200/welcome-email/${req.params.username}`, (error, response, body) => {
        // TODO : Send email to the user from WelcomeEmailComponentComponent.ts component as `body`
        // use the body to send email
        res.send('Email sent');
    });
});

示例代码:https://github.com/aslamanver/angular-send-component-email

在此存储库上动态生成组件的演示;

最后,当您访问 /api/send-email/:username 时,这将生成欢迎邮件组件并提供 HTML 正文,此后您可以继续您的电子邮件发送功能。

我为@Googlian 的回答鼓掌。但是,angular 产生了太多不熟悉的 HTML5、CSS3 和 angular 特定的捆绑功能,所以在那之后,如果你想要一个真正有效的,你必须具体地一个一个地删除它们电子邮件内容,否则您的电子邮件很可能会被邮件客户端视为垃圾邮件。

我建议您使用 xHTML 标准的组件,但没有 CSS3、no-experimental HTML5 功能,并构建一个带有 thisElementRef,然后手动解析必填字段。

将字符串发送到服务器端,nodejs,然后作为电子邮件发送。你可以使用 nodemailer