Angular 2 如何用 PHP 发送邮件?

2024-02-23

我学习 Angular 2,但我在网上没有看到任何将简单的联系表单从 Angular 2 发送到 php scrip 的示例。

我的 html 模板。

<form novalidate="" (ngSubmit)="guardar(forma)" #forma="ngForm">
    <div class="field">
        <label for="name">Nombre:</label>
        <input type="text"
               id="name"
               name="name"
               required
               minlength="3"
               ngModel>
    </div>

    <div class="field">
        <label for="email">Email:</label>
        <input type="email"
               id="email"
               name="email"
               required
               ngModel
               pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$">
    </div>

    <div class="field">
        <label for="message">Mensaje:</label>
        <textarea id="message"
                  name="message"
                  required
                  ngModel></textarea>
    </div>

    <div class="field">
        <button [disabled]="!forma.valid"
                type="submit">
            Enviar
        </button>
    </div>
</form>

PHP脚本

<?php
    $name = strip_tags(trim($_POST["name"]));
    $name = str_replace(array("\r","\n"),array(" "," "),$name);
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $message = trim($_POST["message"]);

    $recipient = "[email protected] /cdn-cgi/l/email-protection";
    $subject = "New contact from $name";

    $email_content = "Name: $name\n";
    $email_content .= "Email: $email\n\n";
    $email_content .= "Message:\n$message\n";

    $email_headers = "From: $name <$email>";

    mail($recipient, $subject, $email_content, $email_headers)
?>

我的不完整的 Angular 2 组件。 我已经在我的应用程序组件中导入了 HttpModule 和 FormsModule

import { Component } from '@angular/core';
import { NgForm } from '@angular/forms';
import { Http } from '@angular/http';

@Component({
    selector: 'app-contacto',
    templateUrl: './contacto.component.html',
    styleUrls: ['./contacto.component.scss']
})
export class ContactoComponent {
    title = 'Contacto';

    constructor( private http: Http){}

    url='http://myUrl.com/mailerscript.php';

    name:string;
    email:string;
    message:string;

    guardar( forma:NgForm ) {

        this.name = 'name='+forma.value.name;
        this.email = 'email='+forma.value.email;
        this.message = 'message='+forma.value.message;

        /*??*/
        this.http.post(this.url, "");

    }
}

您似乎陷入了 Angular 和 PHP 之间的接口 - 这是可以理解的,因为它不像通过访问变量那么简单$_POST超全球。

默认情况下,Angular 将请求正文中传递给它的数据作为json字符串,因此您必须访问原始请求正文并将其解析为可用的 PHP 变量。

以下示例显示了无需额外框架或其他依赖项即可执行此操作的最基本方法。您可以(并且应该)遵循更好的组织实践并将这些内容移动到服务中,但这会增加一层不需要的复杂性:

import { Component, OnInit } from '@angular/core';
import {Http} from "@angular/http";

@Component({
  selector: 'app-mailer',
  template: '<button (click)="sendEmail()">Send the Email</button>'
})
export class MailerComponent implements OnInit {

  email : string;
  name : string;
  message : string;
  endpoint : string;

  http : Http;

  constructor(http : Http) {
    this.http = http;
  }

  ngOnInit() {
    //This data could really come from some inputs on the interface - but let's keep it simple.
    this.email = "[email protected] /cdn-cgi/l/email-protection";
    this.name = "Hayden Pierce";
    this.message = "Hello, this is Hayden.";

    //Start php via the built in server: $ php -S localhost:8000
    this.endpoint = "http://localhost:8000/sendEmail.php";
  }

  sendEmail(){
    let postVars = {
      email : this.email,
      name : this.name,
      message : this.message
    };

    //You may also want to check the response. But again, let's keep it simple.
    this.http.post(this.endpoint, postVars)
        .subscribe(
            response => console.log(response),
            response => console.log(response)
        )
  }
}

还有 PHP 脚本。请注意,这会检查多个请求方法。它还检查 OPTIONS 请求。看看为什么这是必要的 https://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource.

为了使其尽可能简单,我已经跳过了对输入的清理来自 Angular,这被认为是一个严重的安全问题。您应该将其添加到面向生产的应用程序中:

<?php

switch($_SERVER['REQUEST_METHOD']){
    case("OPTIONS"): //Allow preflighting to take place.
        header("Access-Control-Allow-Origin: *");
        header("Access-Control-Allow-Methods: POST");
        header("Access-Control-Allow-Headers: content-type");
        exit;
    case("POST"): //Send the email;
        header("Access-Control-Allow-Origin: *");

        $json = file_get_contents('php://input');

        $params = json_decode($json);

        $email = $params->email;
        $name = $params->name;
        $message = $params->message;

        $recipient = '[email protected] /cdn-cgi/l/email-protection';
        $subject = 'new message';
        $headers = "From: $name <$email>";

        mail($recipient, $subject, $message, $headers);
        break;
    default: //Reject any non POST or OPTIONS requests.
        header("Allow: POST", true, 405);
        exit;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 如何用 PHP 发送邮件? 的相关文章

  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • 按文件名对 $_FILES 进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 他俩 如您所知 在新的 HTML5 中 您可以非常轻松地上传多个文件 但我这里的问题是如何按列 名称 对 FILES 数组进行排序 这是
  • 无法访问 localhost/xampp/index.php

    我刚刚安装了 Windows 7 的 XAMPP 控制面板似乎工作正常 我启动了 MySql 和 Apache 我遇到的问题是 当我在浏览器 Google Chrome 中输入 localhost 时 它会将我发送到 http localh
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • CakePHP 视图包括其他视图

    我有一个 CakePHP 应用程序 在某些时候会显示带有产品媒体 图片或视频 的视图 我想知道是否有某种方式可以包含另一个威胁视频或威胁图片的视图 具体取决于标志 我想将这些 小视图 用于其他几个目的 所以它应该 像 蛋糕组件一样 以便重用
  • RxJS 订阅内部订阅,每个级别返回值并存储到各自的变量中

    我知道已经有关于嵌套订阅的帖子 在这里 我们有 5 个级别的订阅操作 每个变量 operationId actionlistId componentId traceId 这里 API 正在调用 其功能如下 Step 1 订单模板 ID 为a
  • 分页显示所有其他页面上第 1 页的相同帖子

    我最近在创建即将发生的事件列表时得到了很多帮助 请参阅此处显示即将举行的活动 包括今天的活动 https stackoverflow com questions 17343615 showing upcoming events includ
  • 角度 2 通道数组到自定义验证器(模板驱动形式)

    我需要将一个对象数组传递给 a2 自定义验证器 然后我想根据该数组中的记录验证模板驱动表单字段的值 但是我无法检索验证器内的对象 我唯一能看到的是它的名称作为字符串 如有任何帮助 我们将不胜感激
  • 将 cookie 设置为在当天结束时过期

    我想设置一个 cookie 并让它在一天结束时过期 这有效 但 24 小时后过期 setcookie route upgrade voted true time 86400 这不起作用 setcookie route upgrade vot
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • 使用 XPATH(和 PHP)从样式属性中选择背景 url

    我只想从此背景图像样式属性中选择 url 这可以通过 XPATH 实现吗 a href http www test com style background image none test a 我有类似的东西 url xpath gt qu
  • 是否可以用 PHP 编写电子邮件解析器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过互联网IP地址从一台计算机访问xampp到另一台计算机

    我试图从另一台计算机访问我的 xampp 它显示为禁止错误 然后我在 google 上搜索答案 因为他们告诉在 apache 文件夹中的 httpd conf 文件中更改一些设置 如下所示 Order Deny Allow Deny fro
  • 有角度的动态背景图片

    在 html 模板中 我有这种带有动态图像的样式 div style background none width 200px height 150px div 它适用于网络浏览器和 Android 浏览器 但是 使用 style 的动态背景
  • 如何处理 REST api 中的 php 通知、警告和错误?

    在 REST API 中 200 响应表明操作成功 PHP 默认情况下直接在响应正文中输出错误消息 而不更改响应代码 在 SPA 中 用户无法直接看到响应文本 因此 当应用程序未按预期工作时 我通过 FireBug 检查响应正文 以检查可能
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • PHP 检查当前日期是在设定日期之前还是之后

    我从数据库中提取一个日期 其格式为 dd mm YYYY 我想做的是检查当前日期 如果当前日期早于数据库中的日期 则需要打印数据库日期 如果是在之后 则需要打印 继续 有人能指出我正确的方向吗 if strtotime database d
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • PHPUnit - 模拟 S3Client 无法正常工作

    库 aws aws sdk php 2 PHP 版本 PHP 5 4 24 cli 作曲家 json require php gt 5 3 1 aws aws sdk php 2 require dev phpunit phpunit 4

随机推荐

  • 为什么4.2.0版本没有maven Resteasy-jaxrs包?

    我在 Maven 中看到的最后一个版本resteasy jaxrs是 3 8 1 当尝试升级时resteasy client到 4 2 0 存在依赖关系resteasy jaxrs 4 2 0 org jboss resteasy plug
  • 防止片段着色器中的循环展开

    我正在使用最新版本的 Chrome 和 Firefox 为 WebGL GLSL ES 1 0 编写一个片段着色器 并且编写了一个迭代算法 首先 我发现循环的长度是非常有限的 文档说它必须在编译时是可猜测的 这意味着它必须是一个常量或非常接
  • Zend Framework 2 - 自定义表单验证

    我需要自定义表单验证 所以我写了一个类似的函数this http framework zend com manual 2 0 en modules zend validator writing validators html one 到目前
  • 如何在 Java Swing 应用程序中播放 MP4 视频

    有谁知道我可以在 JPanel 中播放 mp4 视频文件的方法吗 我尝试过使用 avi 文件使用 JMF 但没有成功 现在我对播放视频文件这样一个简单的任务变得如此乏味感到困惑和沮丧 请任何人告诉我我可以走什么路 我将不胜感激 我听说过 V
  • android recyclerview 不显示项目

    我想在我的回收视图中显示这些项目 但它根本不显示 而且我看不到错误 也许你们可以帮助我 MainActivity java RecyclerView recyclerView RecyclerView findViewById R id r
  • pandas 数据帧索引:to_list() 与 tolist()

    我最近为某人编写了一个 python 脚本 其中我使用以下命令将 pandas 数据帧的索引转换为列表to list 然而 这对他们不起作用 因为他们得到 AttributeError Index object has no attribu
  • 如何将 django 中的 InMemoryUploadedFile 转换为 flickr API 的格式?

    我有一个类将文件上传到 Flickr 该文件的类型为 内存中上传文件 我想知道如何将 InMemoryUploadedFile 文件中的数据转换或传递为 flickr API 的格式 Eg photo image jpg
  • Django 管理员:一对一关系作为内联?

    我正在为 satchmo 应用程序整理管理员 Satchmo 使用 OneToOne 关系来扩展基础Product模型 我想在一页上全部编辑 是否可以将 OneToOne 关系作为内联关系 如果没有 将一些字段添加到我的管理的给定页面 最终
  • Python - 快速修复:尝试登录时 getHeader() 属性错误

    我正在使用 Quickfix 并修改了 toAdmin 函数以将用户名和密码插入登录消息中 我根据 C 指令改编了代码 但遇到了奇怪的 getHeader 属性错误 回溯如下 lt 20151223 10 48 31 142 FIX 4 2
  • 为什么用 python 编写的决策树代码的预测结果与用 R 编写的代码不同?

    我正在 python 和 R 中使用 sklearn 的 load iris 数据集 在 R 中称为 iris 我使用 基尼 索引以两种语言构建了模型 并且当直接从虹膜数据集中获取测试数据时 我能够在两种语言中正确测试模型 但是 如果我给出
  • CoreData:无法在路径加载优化模型

    I am getting this warning multiple times when i goto a view using google maps This started as soon as i migrated to swif
  • 如何在 Vim 中向行范围添加行号?

    如何向在 Vim 中打开的文件中的一系列行添加行号 不像在 set nu 这只是displays行号 但实际上是否将它们添加到文件中的每一行前面 With s line 编辑 总结评论 该命令可以根据需要进行调整 假设您想在视觉选择的行前面
  • 如何在 fastapi 响应中包含非 pydantic 类?

    我想将自定义类包含到路线的响应中 我主要使用嵌套pydantic BaseModels 在我的应用程序中 因此最好返回整个内容 而无需编写从内部数据表示到路由返回内容的转换 只要一切继承自pydantic BaseModel这很简单 但我正
  • 我如何从网站上阅读? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试制作一个机器人 如何从网站读取 1800 1800 这样的值 Console WriteLine Health Console
  • JWT 令牌存储在服务器的哪里以及其他相关问题

    正如标题所示 JWT 令牌存储在服务器端的哪里 在数据库中还是在内存中 我知道实施可能会因不同的要求而有所不同 但一般来说您会将其存储在哪里 如果我想提供一个非常基本的令牌身份验证服务器 这意味着在通过 POST 请求收到用户名和密码后 我
  • Docker - 检查容器内是否从主机安装了目录

    我需要检查目录是否在我正在运行的容器中是否从主机安装 示例 使用docker run v host data data 命令 如果未安装 我想警告用户 当容器终止时 此目录上的数据将丢失 我找到了一个粗略但简单的解决方案 mount gre
  • 在运行时石墨烯上创建动态模式

    我几乎花了 3 天找到一种在 python graphene 中创建动态模式的方法 我能找到的唯一相关结果是以下链接 https github com graphql python graphene blob master graphene
  • 我应该如何引用角度自定义元素(Web 组件)中的资源

    我创建了一个 Web 组件 并从其中引用了我的资产文件夹中的图像 as below img src assets bot png alt 在本地一切都很好 我将自定义元素发布到 firebase 主机 并且 javascript css 和
  • @media 查询中的字体大小不适用

    我已经设法让 iFrame 和正文内容宽度随着 media规则但是我无法成功调整字体大小 在我的 HTML 中 media规则位于我的样式 css 之后 位于单独的文件中 我看不出是什么在阻止font size改变字体大小 JSFiddle
  • Angular 2 如何用 PHP 发送邮件?

    我学习 Angular 2 但我在网上没有看到任何将简单的联系表单从 Angular 2 发送到 php scrip 的示例 我的 html 模板