如何在Outlook邮件中发送StringList并设置文本对齐与格式
Hey there! The issue you're running into is that MailItem.Body only supports plain text—so you can't get consistent alignment, font styling, or other formatting tweaks (plain text tabs also behave unpredictably across different email clients).
To fix this and get the polished look you want, switch to using MailItem.HTMLBody instead. HTML lets you control fonts, alignment, and use tables to keep your labels and values neatly aligned (way more reliable than tabs!).
Here's your modified code with proper formatting support:
procedure TForm1.Button1Click(Sender: TObject); const olMailItem = 0; var Outlook : OLEVariant; MailItem : Variant; HTMLBody: string; begin try Outlook := GetActiveOleObject('Outlook.Application'); except Outlook := CreateOleObject('Outlook.Application'); end; try MailItem := Outlook.CreateItem(olMailItem); MailItem.Subject := 'Leavers form'; MailItem.Recipients.Add('*******@hotmail.com'); MailItem.CC := '******@googlemail.com'; // Build formatted HTML body HTMLBody := '<html><body style="font-family: Arial, sans-serif; font-size: 10pt;">'; HTMLBody := HTMLBody + '<p style="text-align: left;">Hi all,</p>'; HTMLBody := HTMLBody + '<p style="text-align: left;">Please find leavers details below,</p>'; HTMLBody := HTMLBody + '<p style="text-align: left;">Thank you,</p>'; HTMLBody := HTMLBody + '<br>'; // Use a table for consistent label-value alignment HTMLBody := HTMLBody + '<table style="border-collapse: collapse; width: 650px;">'; // Add each form field as a table row HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Employee Name:</td><td style="padding: 4px;">' + Edit1.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Payroll Number:</td><td style="padding: 4px;">' + Edit2.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Campaign:</td><td style="padding: 4px;">' + Edit3.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Leave Date:</td><td style="padding: 4px;">' + Edit4.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Probation Period:</td><td style="padding: 4px;">' + ComboBox1.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Reason for leaving:</td><td style="padding: 4px;">' + ComboBox8.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">If other please specify:</td><td style="padding: 4px;">' + Edit7.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Would you re-employ?:</td><td style="padding: 4px;">' + ComboBox2.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">If "no" please specify reasons:</td><td style="padding: 4px;">' + Edit9.Text + '</td></tr>'; // Fix line wrap issue for advance payment question HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Has Employee received an advance payment to recoup from final salary?:</td><td style="padding: 4px;">' + ComboBox3.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Additional details:</td><td style="padding: 4px;">' + Edit11.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Due payment in lieu of notice?:</td><td style="padding: 4px;">' + ComboBox4.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">If "yes" specify weeks (e.g 4.25):</td><td style="padding: 4px;">' + Edit13.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Holiday Entitlement to date:</td><td style="padding: 4px;">' + Edit14.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Holiday taken to date:</td><td style="padding: 4px;">' + Edit15.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Holidays to be paid/deducted:</td><td style="padding: 4px;">' + Edit16.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Has employee returned laptop?:</td><td style="padding: 4px;">' + ComboBox9.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Has employee returned pass?:</td><td style="padding: 4px;">' + ComboBox5.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Has employee returned headset?:</td><td style="padding: 4px;">' + ComboBox6.Text + '</td></tr>'; HTMLBody := HTMLBody + '<tr><td style="padding: 4px 15px 4px 0; text-align: left; font-weight: bold;">Has employee returned locker key?:</td><td style="padding: 4px;">' + ComboBox7.Text + '</td></tr>'; HTMLBody := HTMLBody + '</table>'; HTMLBody := HTMLBody + '</body></html>'; // Assign formatted HTML to the mail item MailItem.HTMLBody := HTMLBody; // Uncomment below to preview before sending // MailItem.Display; MailItem.Send; finally // Clean up OLE variants Outlook := Unassigned; MailItem := Unassigned; end; end;
Key improvements made:
- Consistent alignment: Uses an HTML table to ensure labels and values line up perfectly, no more wonky plain-text tabs.
- Font control: Sets a standard sans-serif font (Arial) and 10pt size for readability across all email clients.
- Fix line wraps: Merged the broken advance payment question into a single row to avoid messy text splitting.
- Easy formatting tweaks: To center a section (like a header), just change
text-align: lefttotext-align: centerin the<p>style. You can also add colors, borders, or adjust padding by modifying the HTML styles.
内容的提问来源于stack exchange,提问作者jeffy biscuits
相关产品推荐
相关产品推荐

