tcdirectmail
Installation
tcdirectmail Extension installieren
Einrichten
Seite anlegen und Template zuweisen, welches Setup und Constants löscht sowie Rootlevel ist.
Das Template Setup inkludiert newsletter.ts
newsletter.ts
Hieraus wird die Mail generiert. Nicht vergessen das richtigr Charset einzustellen (hier UTF-8) und RealURL ggf. anpassen oder die entsprechenden Einträge löschen.
#--------------------------------
# General
#--------------------------------
tt_content.list.20 >
plugin.tx_cssstyledcontent._CSS_DEFAULT_STYLE >
plugin.tx_cssfilelist._CSS_DEFAULT_STYLE >
plugin.tx_indexedsearch._CSS_DEFAULT_STYLE >
plugin.tx_macinasearchbox_pi1._CSS_DEFAULT_STYLE >
plugin.tx_sgsearch._CSS_DEFAULT_STYLE >
plugin.tx_newloginbox_pi1._CSS_DEFAULT_STYLE >
plugin.tx_newloginbox_pi3._CSS_DEFAULT_STYLE >
plugin.tx_srlanguagemenu_pi1._CSS_DEFAULT_STYLE >
plugin.tx_thmailformplus_pi1._CSS_DEFAULT_STYLE >
config.removeDefaultJS = 1
config.inlineStyle2TempFile = 0
# Urls
config.simulateStaticDocuments = 0
config.tx_realurl_enable = 1
config.prefixLocalAnchors = all
config.no_cache = 0
[globalString = ENV:HTTP_HOST=myhost.de]
config.baseURL = myhost.de
[global]
# Title
config.noPageTitle = 2
page.headerData {
10 = TEXT
10.dataWrap = <title>Default Site - {page:title}</title>
}
# RTE
content.RTE_compliant = 1
content.RTE_compliant.mode =
config.renderCharset=UTF-8
# Comments
tt_content.stdWrap.prefixComment >
# Header
config {
# xhtml-transitional
# htmlTag_langKey ...set in language dialog
doctype = xhtml_trans
xhtml_cleaning = all
xmlprologue = none
headerComment (
Design and Programming by www.rootsystem.de
)
}
# Spam
config.spamProtectEmailAddresses = 1
config.spamProtectEmailAddresses_atSubst = (at)
#--------------------------------
# Page
#--------------------------------
page = PAGE
page {
# ---------- General ----------
typeNum = 0
bodyTag = <body>
meta.DESCRIPTION.field = abstract
meta.AUTHOR.field = author
meta.KEYWORDS.field = keywords
meta.audience = all
config.metaCharset =UTF-8
config.additionalHeaders = Content-Type:text/html;charset=UTF-8
# Comments
config.xhtml_cleaning = all
config.disablePrefixComment = 1
headerData {
70 = TEMPLATE
70.template.file = fileadmin/layout/html/rsys_page_newsletter.html
70.template = FILE
70.subparts.DOCUMENT
70 {
workOnSubpart = HEADER
# ---------- Content ----------
marks {
# ---------- RSYS_HEADER_LEFT ----------
RSYS_HEADER_LEFT = TEXT
RSYS_HEADER_LEFT
}
}
}
}
#--------------------------------
# content header
#--------------------------------
lib.stdheader >
lib.stdheader = CASE
lib.stdheader {
key.field = header_layout
default = TEXT
default.field = header
default.wrap = <h1>|</h1>
1 = TEXT
1.field = header
1.wrap = <h2>|</h2>
2 = TEXT
2.field = header
2.wrap = <h3>|</h3>
# hidden
100 = TEXT
100.value =
}
#--------------------------------
# Page Content and Menu
#--------------------------------
page.10.template.file = fileadmin/layout/html/rsys_page_newsletter.html
page = PAGE
page {
# ---------- Template ----------
10 = TEMPLATE
10.template = FILE
10.subparts.DOCUMENT < tempTitle.sectionMenu
10 {
workOnSubpart = DOCUMENT
# ---------- Content ----------
marks {
# ---------- RSYS_CONTENT_HEADERPICTURE ---------
RSYS_CONTENT_HEADERPICTURE = TEXT
RSYS_CONTENT_HEADERPICTURE {
data = levelmedia:3 // levelmedia:2 // levelmedia:1 // levelmedia:0
file {
import.data = levelmedia:3 // levelmedia:2 // levelmedia:1 // levelmedia:0
import = uploads/media/
import.listNum = 0
}
}
# ---------- end RSYS_CONTENT_HEADERPICTURE ---------
# ---------- RSYS_CONTENT_0 ----------
RSYS_CONTENT_0 = CONTENT
RSYS_CONTENT_0 {
table = tt_content
select.orderBy = sorting
select.where = colPos = 0
select.languageField = sys_language_uid
}
# --- end RSYS_CONTENT_0
# ---------- RSYS_CONTENT_1 ----------
RSYS_CONTENT_1 = CONTENT
RSYS_CONTENT_1 {
table = tt_content
select.orderBy = sorting
select.where = colPos = 1
select.languageField = sys_language_uid
}
# --- end RSYS_CONTENT_1
# ---------- RSYS_CONTENT_2 ----------
RSYS_CONTENT_2 = CONTENT
RSYS_CONTENT_2 {
table = tt_content
select.orderBy = sorting
select.where = colPos = 2
select.languageField = sys_language_uid
}
# --- end RSYS_CONTENT_2
# ---------- RSYS_CONTENT_3 ----------
RSYS_CONTENT_3 = CONTENT
RSYS_CONTENT_3 {
table = tt_content
select.orderBy = sorting
select.where = colPos = 3
select.languageField = sys_language_uid
}
# --- end RSYS_CONTENT_3
# --- RSYS_ABSTRACT
RSYS_ABSTRACT = COA
RSYS_ABSTRACT {
10 = TEXT
10.field = abstract
}
# --- end RSYS_ABSTRACT
# ---------- RSYS_FOOTER ----------
RSYS_FOOTER = COA
RSYS_FOOTER {
10 = HMENU
10.special=rootline
10.special.range= 1 | -1
10.1=TMENU
10.1.NO.allWrap= | / |*|| / |*||
30 = TEXT
30.if.isTrue.field=subtitle
30.field = subtitle
30.wrap = - |
}
# --- end RSYS_FOOTER
}
# --- end marks
}
# --- end 10
}
# --- end page
Das zugehörige html Template:
Für Mails ist es wohl besser inline styles zu verwenden. Deshalb hier der Subpart HEADER
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>rsysNewsletterDesign1.0</title>
<!-- ###HEADER### -->
<style type="text/css">
/*<![CDATA[*/
<!--
body {
/* text */
font-family: "Microsoft Sans Serif", sans-serif;
font-size: 12px;
text-align: left;
line-height:1.3em;
}
td,
th {
}
a,
.filelinks a {
/* text */
text-decoration: none;
/* border */
margin: 0px;
padding: 0px;
}
a:hover,
.filelinks a:hover {
/* text */
text-decoration: none;
}
td a {
}
th a {
}
-->
/*]]>*/
</style>
<!-- ###HEADER### -->
</head>
<body>
<!-- ###DOCUMENT### -->
<div id="body_overlay">
<div id="rsys_header">
<div id="rsys_header_content">
<div id="rsys_header_left">
</div>
<div id="rsys_header_right">
</div>
</div>
</div>
<div id="page_box">
<div id="minheight"></div>
<div id="page_box_left">
</div>
<div id="page_box_right">
<div id="rsys_content_0" class="rsys_content rsys_content_text">
<!--TYPO3SEARCH_begin-->
###RSYS_CONTENT_0###
</div>
<div id="rsys_content_1" class="rsys_content rsys_content_text">
###RSYS_CONTENT_1###
</div>
<div id="rsys_content_2" class="rsys_content rsys_content_text">
###RSYS_CONTENT_2###
</div>
<div id="rsys_content_3" class="rsys_content rsys_content_text">
###RSYS_CONTENT_3###
<!--TYPO3SEARCH_end-->
</div>
</div>
</div>
<div id="footer"></div>
</div>
<!-- ###DOCUMENT### -->
</body>
</html>
Content
Seite vom Typ newsletter anlegen. In den Seiteneigenschaften kann der Newsletter konfiguriert werden. Dann beliebigen Seiteninhalt anlegen.
Hierzu müssen auch Empfängergruppen angelegt werden die dann in den Seiteneigenschaften ausgewählt werden müssen.
Versenden
In der Ansicht Newsletter mit Preview: Html Plain kann man sich das Ergebniss ansehen. Das Versenden per Cron hat mich wahnsinnig gemacht. Letztlich ging es erst nachdem man
- Im Backend: Tools/Newsletter Kontrollsystem die php Pfade korrigiert (bei Extension gesetzt)
- In /ext/tcdirectmail/die Dateien mailer.php, advanced_connect.php und bounce.php auf executable gesetzt hat
- Den Cronjob angelegt
- safe_mode abgeschaltet hat - und zwar für PHP im Client Mode! Da gibt's eine Extra php.ini (z.B. /etc/php5/cli/php.ini)
Bugs in Verbindung TYPO3 4.6
Um die Extension unter TYPO3 4.6 zum laufen zu bekommen musste ich folgendes ändern:
Fehler "undefined method t3lib_div::fixed_lgd_pre"
in mod1/index.php "fixed_lgd_pre" ersetzen mit "fixed_lgd_cs".
Cronjob
Damit der cronjob funktioniert:
- BE User _cli_tcdirectmail anlegen
- In cli/mailer.phpsh den PHP Pfad anpassen (#!/usr/bin/php)
Aufruf in crontab:
* * * * * root /var/www/typo3conf/ext/tcdirectmail/cli/mailer.phpsh
TYPO3 V6.1
Leider läuft die Extension nicht mehr auf TYPO3 V6.1. Also musste ich wieder zurück zu der direct_mail Extension - wobei mein Eindruck ist, daß diese inzwischen besser zu handhaben ist.
Update
Die Version 3.1.1 läuft laut Doku unter TYPO3 6.2 - getestet habe ich das bisher noch nicht, ich bin bei der directmail Extension geblieben.