ไคลเอนต์เมลลอกส่วนหนึ่งของ URL เชิงมุม

ฉันกำลังส่งอีเมลเปิดใช้งานการลงทะเบียนซึ่งมี URL ยืนยันการลงทะเบียนพร้อมโทเค็นการยืนยันที่ชี้ไปยังแอปส่วนหน้าเชิงมุม:

... <a href="https://domain.com/#/confirm-signup?token=1234...">Activate</a> ...

โปรดทราบว่าโทเค็นนั้นเป็น JWT และค่อนข้างยาว

วิธีนี้ใช้ได้ผลสำหรับผู้ใช้ส่วนใหญ่ แต่สำหรับการคลิกลิงก์บางส่วนจะพาพวกเขาไปที่ https://domain/com โดยไม่มี confirm-signup?token=...

ดูเหมือนว่าโปรแกรมรับส่งเมลอาจลอกทุกอย่างหลังจาก # แต่ฉันไม่พบหลักฐานใด ๆ ที่แสดงว่าผู้อื่นประสบปัญหานี้ และฉันไม่สามารถทำซ้ำได้

การเดาที่ดีที่สุดของฉันคือไคลเอนต์เมลบางตัวเห็น # และถือว่าส่วนต่อท้ายเหมือนสมอภายในและลอกมันออก...?

มีใครประสบปัญหาประเภทนี้หรือไม่? หากเป็นเช่นนั้น คุณพบวิธีแก้ปัญหาใด ๆ ที่ไม่สามารถเปลี่ยนกลไกทั้งหมดด้วยอย่างอื่นได้หรือไม่


person Peter Whitfield    schedule 19.10.2015    source แหล่งที่มา
comment
ใช่ ฉันเคยพบปัญหานี้มาก่อนเนื่องจาก # เราพยายามลิงก์ไปยังจุดยึดบนแลนดิ้งเพจ   -  person Bidstrup    schedule 19.10.2015


คำตอบ (3)


ลูกค้าบางรายปฏิบัติต่อแฮชลิงก์ได้ดี คนอื่นทำไม่ได้ มีการสนทนาเกี่ยวกับ Outlook ที่สกปรกเกี่ยวกับเรื่องนี้ที่นี่: Outlook ตัดแฮช URL จากอีเมล

สิ่งที่เราทำเพื่อแก้ไขปัญหานี้ที่บริษัทของเราคือเพียงสร้างตัวจัดการบนเซิร์ฟเวอร์ของเราที่เปลี่ยนเส้นทาง ลิงก์อีเมลของคุณจะกลายเป็น http://domain.com/email-link?url=https%3A%2F%2Fdomain.com%2F%23%2Fconfirm-signup%3Ftoken%3D1234 และสคริปต์ฝั่งเซิร์ฟเวอร์ของคุณจะดึงพารามิเตอร์การสืบค้น url และทริกเกอร์การเปลี่ยนเส้นทางทันที

คุณจะต้องตรวจสอบให้แน่ใจว่าคุณพบลิงก์ทั้งหมดในอีเมลของคุณและแทนที่ลิงก์เหล่านั้น นี่คือฟังก์ชัน PHP สำหรับสิ่งนั้น แต่คุณสามารถทำได้ในภาษาแบ็กเอนด์ใดก็ตามที่คุณใช้ Regex ที่นี่อาจมีประโยชน์อย่างน้อย

function replaceLinks($html,$hash) {
    return preg_replace_callback('/<a [^>]*href=[\"\']{1}(.+?)[\"\\\']{1}/', function($matches) use ($hash) {
        return str_replace($matches[1],"http://domain.com/email-link?url=".rawurlencode($matches[1]),$matches[0]);
  }, $html);
}
person David Boskovic    schedule 20.10.2015
comment
ฉันสงสัยว่านี่เป็นวิธีแก้ปัญหาที่น่าเชื่อถือที่สุด ในระยะสั้น เราได้เลือกใช้ลิงก์แบบสั้น แต่นั่นก็นำมาซึ่งปัญหาของตัวเองในแง่ของการถูก Gmail ขมวดคิ้ว เป็นต้น แอปเชิงมุมปัจจุบันของเราไม่มีส่วนประกอบฝั่งเซิร์ฟเวอร์ ดังนั้นวิธีแก้ปัญหานี้จึงเป็น เป็นเรื่องที่ยุ่งยากเล็กน้อยสำหรับเราในการดำเนินการ - person Peter Whitfield; 21.10.2015
comment
@PeterWhitfield คุณสามารถตั้งค่าสคริปต์การเปลี่ยนเส้นทางที่ส่วนหน้าได้อย่างง่ายดายโดยเพียงแค่ดูที่พารามิเตอร์แบบสอบถามแล้วเปลี่ยนเส้นทางด้วย window.location - person David Boskovic; 21.10.2015

ใช่ ฉันเคยพบปัญหานี้มาก่อนเนื่องจาก # ฉันพยายามเชื่อมโยงไปยังจุดยึดบนหน้า Landing Page .. โซลูชันของฉันลงเอยด้วยการใช้บริการ short.url เพื่อ "ซ่อน" # จาก html เช่น https://goo.gl/

person Bidstrup    schedule 19.10.2015
comment
คุณใช้แค่จุดยึดท้องถิ่น (เช่น: href="#...") หรือไม่? การตรวจสอบแคมเปญมีโพสต์เกี่ยวกับพฤติกรรมที่แปรผันในกรณีนี้ และฉันสงสัยว่าสำหรับลูกค้าบางราย การดำเนินการนี้นอกเหนือไปจากจุดยึดที่จ้องมองด้วย # และบางครั้งก็รวม URL แบบเต็มซึ่งรวมถึง # ที่ใดที่หนึ่งในสตริง - person Peter Whitfield; 19.10.2015

ดูเหมือนว่าคุณจะต้องการเข้ารหัสเปอร์เซ็นต์!

หลายครั้งที่ href ของคุณถูกแยกวิเคราะห์ (โดยเชิงมุมในกรณีนี้) จะไม่สามารถจัดการกับอักขระพิเศษได้อย่างถูกต้องหรือตัดออก ค้นหาอักขระปัญหาของคุณและแทนที่ด้วย %3F สำหรับ ?, %26 สำหรับ & และ %23 สำหรับ # ส่วนที่เหลืออยู่ในแผนภูมิในลิงค์

เมื่อที่อยู่ที่เข้ารหัสเข้าถึงเบราว์เซอร์ URL จะถูกถอดรหัสในแถบ URL ของคุณ

person zazzyzeph    schedule 20.10.2015